由于Canvas3D无法使用父框架动态调整大小,因此我希望能够跟踪用户何时调整窗口大小然后自己手动调整大小。(如果像某些文档所建议的那样最终导致Canvas3D崩溃,我将在用户调整窗口大小时简单地销毁并重新创建它)。此过程的一部分涉及能够准确判断容器面板的起始尺寸。
我尝试过的两种方法:
panel.getHeight(); panel.getPreferredSize()。height;
似乎无法准确地报告情况:getHeight()
始终为零,并getPreferredSize()
返回与面板的实际大小实际上没有任何关系的数字。
有任何想法吗?
编辑:因此,我将调试器带到面板对象上,并手动检查了非对象属性,但没有看到任何类似于宽度/高度的内容。当然,有一些我没有看过的子对象。另外,当我查询高度/对象时,也许窗口必须是可见的(在我与对象交接的那一点不是)?
编辑2:因此,Swing类是AWT类的子类,因此我想如果您能够找到这些类的高度/宽度,则该方法将是通用的。我已经相应地修改了标题。
要确定组件的大小,您必须:
通常,您可以通过getSize()方法获得组件的确切大小,该方法返回包含宽度和高度的Dimension对象,但是getWidth / Height()也应该起作用。但这只有在满足两个先决条件之一的情况下才能起作用。如果从未使窗口可见,则在使窗口/容器可见之后,没有布局管理器或未添加组件(您想知道其大小),该大小通常为零。
因此,为了获得正确的大小,如果在最后一个布局之后添加了组件,则必须使容器/框架可见(添加组件之后),或者在容器上调用validate()或doLayout()以重新计算布局。已经完成。要记住的另一件事是在容器上设置并可能配置布局管理器。如果没有设置布局管理器(空),则即使使容器可见也可以通过调用validate()来设置其子容器的大小。
minimumSize / preferredSize / maximumSize属性是布局管理器的提示,组件的大小应如何设置,但不必遵循(大多数布局管理器都不需要)。
编辑2:阅读完有关同一主题的其他问题之后,我认为您应该阅读The Java Tutorials中的Using Layout Managers。
编辑:我不知道您是否已经知道了,但是要对调整窗口大小作出反应,您可以执行以下操作:
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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句