如何获得框架内部的大小?我的意思是可以添加组件的部分。
当我使用和之.NET
类的语言时,我会做一些技巧。我在表单中添加了一个面板或类似的东西,并使其填充表单(使用 Windows 窗体中的停靠属性),然后使用它的大小。VB
C#
我已经努力做到这一点Java
,但没有成功。我尝试使用 a将 a 添加JPanel
到我的 CENTER ,但是尽管面板填充了框架,但所有与大小相关的函数都返回 0。JFrame
BorderLayout
JPanel
如何获得框架内部的大小?我的意思是可以添加组件的部分。
当我使用和之.NET
类的语言时,我会做一些技巧。我在表单中添加了一个面板或类似的东西,并使其填充表单(使用 Windows 窗体中的停靠属性),然后使用它的大小。VB
C#
我已经努力做到这一点Java
,但没有成功。我尝试使用 a将 a 添加JPanel
到我的 CENTER ,但是尽管面板填充了框架,但所有与大小相关的函数都返回 0。JFrame
BorderLayout
JPanel
尝试使用getContentPane和getWidth / getHeight:
getContentPane().getWidth()
getContentPane().getHeight()
用一个简单的 1440x900 帧测试,我得到 1424x862
当框架还不可见时,您可能正在调用与大小相关的函数。您可以使用:
getContentPane().getSize();
在调用框架的 setVisible(true) 方法之后。在将框架设置为可见之后,像之前所做的那样,将面板的大小添加到框架的中心也将起作用。
你的方法似乎奏效了。但:
JPanel
. getContentPane()
适合。setVisible(true)
为你做这些。但是,如果您不想使JFrame
可见,您可以使用addNotify
and revalidate
。
例子:
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
Container c = f.getContentPane();
f.setSize(800, 600);
System.out.println(c.getSize()); // width=0,height=0
f.addNotify();
f.revalidate();
System.out.println(c.getSize()); // width=784,height=562
f.setVisible(true);
System.out.println(c.getSize()); // width=784,height=562
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}