Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jframe和Jpanel尺寸赢得';行不通_Java_Swing_Jframe_Size_Jpanel - Fatal编程技术网

Java Jframe和Jpanel尺寸赢得';行不通

Java 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

我有一个生成曲面的类骨架,并将其大小设置为400x400

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,也请参见