Java Jframe和Jpanel尺寸赢得';行不通
我有一个生成曲面的类骨架,并将其大小设置为400x400Java Jframe和Jpanel尺寸赢得';行不通,java,swing,jframe,size,jpanel,Java,Swing,Jframe,Size,Jpanel,我有一个生成曲面的类骨架,并将其大小设置为400x400 public class Skeleton extends JFrame { public Skeleton() { initUI(); } private void initUI() { setTitle(""); int height = 400; int width = 400; add(new Surfa
public class Skeleton extends JFrame {
public Skeleton()
{
initUI();
}
private void initUI()
{
setTitle("");
int height = 400;
int width = 400;
add(new Surface());
setPreferredSize(new Dimension(width + getInsets().left + getInsets().right,
height + getInsets().top + getInsets().bottom));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
//setResizable(false);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run() {
Skeleton sk = new Skeleton();
sk.setVisible(true);
}
});
}
}
然后在surface类中,我画了一条从(0,0)到(400400)的线,当我运行代码时,对角线的底端离开面板
class Surface extends JPanel
{
private void makediag(Graphics g, int size)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.drawLine(0, 0, size, size);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
makediag(g, 400);
}
}
我做错了什么?面板的尺寸是否错误,或者图纸坐标是否不同?根据:
使此窗口的大小符合首选大小和布局
它的子组件
因此,窗口应忽略其自身的首选大小,并使用其子组件的首选大小。没有理由期望setPreferredSize
会影响帧的大小。看起来您真正想要做的是将曲面的首选大小设置为(400400)。这也使您不必使用插图。根据:
使此窗口的大小符合首选大小和布局
它的子组件
因此,窗口应忽略其自身的首选大小,并使用其子组件的首选大小。没有理由期望
setPreferredSize
会影响帧的大小。看起来您真正想要做的是将曲面的首选大小设置为(400400)。这也使您不必使用插图。由于您正在为JFrame
设置首选大小,因此JPanel
的大小是错误的
最好的方法是重写JPanels
getPreferredSize
方法并返回所需的维度
protected Dimension getPreferredSize() {
return new Dimension(400, 400);
}
另外,请确保只为您的
JFrame
调用pack
。根本不要调用setXXXSize
。JPanel的大小是错误的,因为您正在为JFrame
设置首选大小
最好的方法是重写JPanels
getPreferredSize
方法并返回所需的维度
protected Dimension getPreferredSize() {
return new Dimension(400, 400);
}
另外,请确保只为您的JFrame
调用pack
。根本不要调用setXXXSize
。+1,也请参见+1,也请参见