当前位置:  开发笔记 > 编程语言 > 正文

找到Swing/AWT对象的"真实"高度/宽度

如何解决《找到Swing/AWT对象的"真实"高度/宽度》经验,为你挑选了1个好方法。

由于Canvas3D无法使用父框架动态调整大小,因此我希望能够跟踪用户何时调整窗口大小,然后自己手动调整大小.(如果这最终导致崩溃Canvas3D,正如一些文档建议的那样,当用户调整窗口大小时,我将简单地销毁并重新创建它).此过程的一部分涉及能够准确地判断容器面板的开始程度.

我试过的两种方法:

panel.getHeight();
panel.getPreferredSize().height;

似乎没有准确报告事物:getHeight()总是为零,并getPreferredSize()返回实际上与面板的实际大小无关的数字.

有任何想法吗?

编辑:所以,我把一个调试器带到面板对象并手动检查非对象属性,我没有看到任何类似宽度/高度的东西.当然,有一些我没看过的子对象.此外,当我查询高度/对象时,可能窗口必须是可见的(它不是,当我正在连接对象时)?

编辑2:所以,Swing类是AWT类的子类,所以我想如果你能够找到那些的高度/宽度,那么这种方法会概括.我相应地修改了标题.



1> Simon Lehman..:

要确定组件的大小,您必须:

在某些时候手动设置它

运行负责布局组件的布局管理器

通常,您通过getSize()方法获得组件的确切大小,该方法返回包含宽度和高度的Dimension对象,但getWidth/Height()也应该起作用.但是,如果满足两个先决条件之一,这只能起作用.如果窗口从未显示过,没有布局管理器或组件(您想知道其大小)已在窗口/容器可见后添加,则大小通常为零.

因此,要获得正确的大小,您必须使容器/框架可见(在添加组件之后)或在容器上调用validate()或doLayout()以重新计算布局,如果您在最后一个布局后添加了组件已经完成.要记住的另一件事是设置并可能在容器上配置布局管理器.如果没有设置布局管理器(null),即使调用容器可见oder调用validate()也不会在其子项上设置大小.

minimumSize/preferredSize/maximumSize属性是布局管理器的提示,组件应如何调整大小,但不必遵守它们(大多数布局管理器不这样做).

编辑2:在我阅读了关于同一主题的其他问题之后,我认为您应该阅读使用 Java教程中的布局管理器

编辑:我不知道你是否已经知道了,但为了对窗口的大小调整作出反应,你可以这样做:

public class WindowResizeTest extends JFrame {

    public static void main(String[] args) {
        new WindowResizeTest();
    }

    public WindowResizeTest() {
        this.setSize(640, 480);

        JPanel panel = new JPanel();
        panel.setBackground(Color.RED);
        this.add(panel);

        this.addComponentListener(new ComponentListener() {

            public void componentResized(ComponentEvent e) {
                System.out.println(e.getComponent().getSize());
            }

            public void componentHidden(ComponentEvent e) {}

            public void componentMoved(ComponentEvent e) {}

            public void componentShown(ComponentEvent e) {}
        });

        this.setVisible(true);
    }

}

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有