如何获得框架内部的大小?我指的是可以添加组件的部分。
当我使用.NET
和VB
等C#
种语言时,我会做一些技巧。我在表单中添加了一个面板或类似内容,并使其填充表单(使用Windows窗体中的dock属性),然后使用其大小。
我在Java
努力做到这一点,但没有成功。我尝试使用JPanel
向我的JFrame
的CENTER添加BorderLayout
,但是虽然面板填充了框架,但JPanel
的所有尺寸相关函数都返回0
答案 0 :(得分:2)
尝试使用getContentPane和getWidth / getHeight:
getContentPane().getWidth()
getContentPane().getHeight()
使用简单的1440x900帧进行测试,得到1424x862
答案 1 :(得分:1)
当帧不可见时,您可能正在调用与大小相关的函数。 您可以使用:
getContentPane().getSize();
调用frame的setVisible(true)方法之后。在将框架设置为可见之后,将面板的大小添加到框架的中心,就像之前一样,也可以正常工作。
答案 2 :(得分:0)
你的方式似乎有效。但是:
JPanel
。 getContentPane()
是合适的。 setVisible(true)
为您做这些。但是,如果您不想让JFrame
可见,则可以使用addNotify
和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);
}
});
}
}