Java,JFrame:getWidth()返回0

adr*_*on3 12 java swing jframe

setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
setResizable(false);
setUndecorated(true);
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening?
Run Code Online (Sandbox Code Playgroud)

我正在尝试确定JFrame的大小.我在谷歌搜索并检查了文档,我仍然不知道为什么它不会工作它可以正常工作任何其他控件我尝试它

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

System.out.println("--------> "+getContentPane().getWidth());
Run Code Online (Sandbox Code Playgroud)

System.out.println("--------> "+this.getWidth());
Run Code Online (Sandbox Code Playgroud)

getWidth仍将返回0

编辑2:我需要框架的大小,然后将其设置为可见和东西.我需要为框架添加其他控件,它们的坐标和大小取决于框架的大小.

aym*_*ric 12

你得到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());
Run Code Online (Sandbox Code Playgroud)

  • 我运行测试,似乎你无法获得框架宽度,因为它不可见,但我意识到,如果你的框架始终是 JFrame.MAXIMIZED_BOTH,那么框架宽度等于屏幕宽度,你可以通过“Toolkit tk”获得= Toolkit.getDefaultToolkit();int screenWidth = tk.getScreenSize().width;` (2认同)

mre*_*mre 10

你还没有意识到(即setVisible(true))JFrame.因此,它没有尺寸,因为它没有布置其组件.

  • 1+.`pack()`也会呈现JFrame(我相信). (2认同)