Java JFrame大小调整不正确

Java JFrame大小调整不正确,java,jframe,size,contentpane,insets,Java,Jframe,Size,Contentpane,Insets,当我设置JFrame的大小时,它会设置框架本身的大小,包括边框。 我尝试创建一个新的内容面板,并设置该大小,而不是设置框架本身的大小,但它不起作用。下面是代码: frame = new JFrame(); JPanel jp = new JPanel(); frame.setTitle(title); //frame.setSize(width, height); frame.setResizable(false); frame.setLocationRelativeTo(null); fra

当我设置JFrame的大小时,它会设置框架本身的大小,包括边框。 我尝试创建一个新的内容面板,并设置该大小,而不是设置框架本身的大小,但它不起作用。下面是代码:

frame = new JFrame();
JPanel jp = new JPanel();
frame.setTitle(title);
//frame.setSize(width, height);
frame.setResizable(false); 
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//insets = frame.getInsets();
//frame.setSize(new Dimension(insets.left + width + insets.right, insets.top + height + insets.bottom));
jp.setPreferredSize(new Dimension(width, height));
frame.setContentPane(jp);
frame.pack();
frame.setVisible(true);
因此,使用插图不起作用,使用新的ContentPane也不起作用,我希望这足够清楚


编辑:它现在可以工作了,我用Canvas扩展了这个类,将它的大小设置为宽度和高度,然后将它添加到JFrame中,然后打包。这管用!但我认为导致它的原因不是大小,而是我渲染它的方式,我从JFrame获得了缓冲策略,而不是画布,这不是它应该的方式。

覆盖
getPreferredSize()
以设置
JPanel
的首选大小

示例代码:

JPanel panel =new JPanel (){

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
}
public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            // GUI related code goes here (not heavy task)
        }
    });
}


使用或确保已正确初始化

示例代码:

JPanel panel =new JPanel (){

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
}
public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            // GUI related code goes here (not heavy task)
        }
    });
}


为什么要设置
JFrame
的新内容窗格?只需使用
frame.getContentPane().add(panel)
frame.add(panel)


调用
frame.setResizeable(false)
最后,在使其可见后,确保所有组件都正确安装。

我刚刚尝试过,并且
ContentPane
上的
setPreferredSize
肯定能正常工作。欢迎使用堆栈溢出,请使用。