Java, JFrame: getWidth() 返回 0

2022-09-04 08:36:22
setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
setResizable(false);
setUndecorated(true);
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening?

我正在尝试确定 JFrame 的大小。我已经在谷歌上搜索并检查了文档,我仍然不知道为什么它不起作用 它适用于我尝试的任何其他控件

编辑:frame.getWidth()在类外部调用时仍然有效(扩展JFrame),如果我替换

System.out.println("--------> "+getContentPane().getWidth());

System.out.println("--------> "+this.getWidth());

getWidth 仍将返回 0

编辑2:我需要框架的大小,然后才能将其设置为可见和内容。我需要向框架添加其他控件,它们的坐标和大小取决于框架的大小。


答案 1

你得到0的原因是因为你没有调用任何pack(),setSize(int,int)或setSize(Dimension)。仅当调用这些方法之一时,才会计算帧的布局。

JFrame frame = new JFrame("My Frame");
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
frame.setResizable(false);
frame.setUndecorated(true);
frame.pack(); // Important line!!! 
frame.setVisible(true);
System.out.println("--------> "+getContentPane().getWidth());

答案 2

你还没有意识到(即)这一点。因此,它没有大小,因为它没有布置其组件。setVisible(true)JFrame


推荐