首先,swing窗口JFrame 自带Layout管理是BorderLayout 但是当我们如果想在一个继承了JPanel的类上重写paint方法
就像这个 我们将它直接添加到JFrame窗口上,而不是添加到JFrame.getcontentPane上,那么它的setBounds方法对于JFrame窗口来说,JFrame的Layout是Null,即使你system.out.println(JFrame.getLayout)依旧无法正常显示,所以你可以将它当成一个null-》getLayout=null ,那么将直接调用setBounds方法即可,如果是非JFrame窗口本体上添加,那么遵守Layout的取值,父类Layout不是null就需要调用setPreferredSize()方法来正常显示,否则直接调用setBounds方法。
说到这里呢,其实跟组件Paint重写方法的关系是 组件未重写,即没事,正常方法添加上JFrame,能显示,否则注意下setBounds方法在JFrame和在其他组件上的不同。
最后附带程序,供参考
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.