如何获得框架内部的大小?

时间:2013-07-04 08:04:37

标签: java

如何获得框架内部的大小?我指的是可以添加组件的部分。

当我使用.NETVBC#种语言时,我会做一些技巧。我在表单中添加了一个面板或类似内容,并使其填充表单(使用Windows窗体中的dock属性),然后使用其大小。

我在Java努力做到这一点,但没有成功。我尝试使用JPanel向我的JFrame的CENTER添加BorderLayout,但是虽然面板填充了框架,但JPanel的所有尺寸相关函数都返回0

3 个答案:

答案 0 :(得分:2)

尝试使用getContentPanegetWidth / getHeight

getContentPane().getWidth()

getContentPane().getHeight()

使用简单的1440x900帧进行测试,得到1424x862

答案 1 :(得分:1)

当帧不可见时,您可能正在调用与大小相关的函数。 您可以使用:

getContentPane().getSize();

调用frame的setVisible(true)方法之后。在将框架设置为可见之后,将面板的大小添加到框架的中心,就像之前一样,也可以正常工作。

答案 2 :(得分:0)

你的方式似乎有效。但是:

  • 您无需手动添加JPanelgetContentPane()是合适的。
  • 如果你想得到它的大小。你需要
    1. 通过将此JFrame连接到本机屏幕资源,使其可显示。
    2. 重新验证JFrame。

setVisible(true)为您做这些。但是,如果您不想让JFrame可见,则可以使用addNotifyrevalidate

示例:

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);
            }
        });
    }
}