当我设置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);
因此使用insets并不起作用并且使用新的ContentPane也不起作用我希望它足够清楚。
编辑:现在我正在使用Canvas扩展该类,将其大小设置为宽度和高度,然后将其添加到JFrame然后将其打包。这有效!但是为什么我认为它不是尺寸,而是我渲染它的方式,我从JFrame而不是画布得到了bufferStrategy,这不是应该的样子。
答案 0 :(得分:1)
覆盖getPreferredSize()
以设置JPanel
的首选大小。
示例代码:
JPanel panel =new JPanel (){
@Override
public Dimension getPreferredSize() {
return new Dimension(..., ...);
}
}
请参阅Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
使用SwingUtilities.invokeLater()或EventQueue.invokeLater()确保EDT已正确初始化。
示例代码:
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.setResizable(false)
可见之后调用{{1}}以确保所有组件都正确适合。