gpt4 book ai didi

java - 查找 Swing/AWT 对象的 "real"高度/宽度

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:52 24 4
gpt4 key购买 nike

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

我试过的两种方法:

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

似乎没有准确报告事情:getHeight() 始终为零,而 getPreferredSize() 返回的数字实际上与面板的实际大小。

有什么想法吗?

编辑:因此,我对面板对象进行了调试并手动检查了非对象属性,但没有看到任何类似宽度/高度的内容。当然,有些子对象我没有看。另外,当我查询高度/对象时,窗口可能必须是可见的(在我连接对象时它不是)?

编辑 2:因此,Swing 类是 AWT 类的子类,所以我想如果您能够找到它们的高度/宽度,那么该方法就会通用化。我相应地修改了标题。

最佳答案

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

  • 在某些时候手动设置了它
  • 运行负责布局组件的布局管理器

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

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

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

编辑 2: 在我阅读 your other question 之后关于同一主题,我认为您应该阅读 Using Layout Managers来自 Java 教程

编辑:我不知道你是否已经想通了,但是要对窗口大小的调整使用react,你可以这样做:

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

}

关于java - 查找 Swing/AWT 对象的 "real"高度/宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com