Java 查找“;“真正的”;Swing/AWT对象的高度/宽度
由于Canvas3D无法随父帧动态调整大小,因此我希望能够跟踪用户调整窗口大小的时间,然后自己手动调整窗口大小。(如一些文档所建议的那样,如果最终导致Canvas3D崩溃,我将在用户调整窗口大小时销毁并重新创建它)。这个过程的一部分涉及到能够准确地说出容器面板的大小 我尝试过的两种方法: panel.getHeight(); panel.getPreferredSize().height; panel.getHeight(); panel.getPreferredSize().高度; 似乎没有准确地报告问题:Java 查找“;“真正的”;Swing/AWT对象的高度/宽度,java,swing,Java,Swing,由于Canvas3D无法随父帧动态调整大小,因此我希望能够跟踪用户调整窗口大小的时间,然后自己手动调整窗口大小。(如一些文档所建议的那样,如果最终导致Canvas3D崩溃,我将在用户调整窗口大小时销毁并重新创建它)。这个过程的一部分涉及到能够准确地说出容器面板的大小 我尝试过的两种方法: panel.getHeight(); panel.getPreferredSize().height; panel.getHeight(); panel.getPreferredSize().高度; 似乎没有准
getHeight()
总是为零,而getPreferredSize()
返回的数字实际上与面板的实际大小无关
有什么想法吗
编辑:所以,我使用调试器对面板对象进行了调试,并手动检查了非对象属性,但没有看到任何类似宽度/高度的内容。当然,有些子对象我没有看到。另外,当我查询高度/对象时,可能窗口必须是可见的(在我连接对象时,窗口不是可见的)
编辑2:Swing类是AWT类的子类,所以我想如果你能找到这些类的高度/宽度,那么这种方法将得到推广。我已经相应地修改了标题。要确定组件的大小,您必须:
- 在某个时候手动设置它
- 运行负责布局组件的布局管理器
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);
}
}
我发现,如果您使用JFrame进行扩展,这段代码也可以用来节省时间、精力和空间
int windowWidth = getWidth();
int windowHeight = getHeight();
我知道你已经得到了一个答案,但如果你需要一个替代方案,就在这里