我正在开发一个swing项目,我有一个继承JComponent的类,但不会覆盖它的任何方法。稍后,在该类的子类中,我调用以下代码:
System.out.println(fImage.getHeight() + " " + fImage.getWidth());
propertyFrontLabel = new JLabel(new ImageIcon(fImage));
propertyBackLabel = new JLabel(new ImageIcon(bImage));
propertyFrontLabel.setSize(fImage.getWidth(), fImage.getHeight());
Dimension d = propertyFrontLabel.getSize();
this.setPreferredSize(d);
this.setSize(d);
System.out.println(d.getSize());
System.out.println(this.getSize());
add(propertyFrontLabel);
这些打印行打印出以下内容:
479 296
java.awt.Dimension中[宽度= 296,高度= 479]
java.awt.Dimension中[宽度= 0,高度= 0]
我不知道发生了什么。为什么这个大小还是0,0?
答案 0 :(得分:3)
您可能使用空布局,或者在渲染之前或在封闭的顶级窗口上调用'pack()'之前在组件上调用'getSize()',或者您是没有覆盖组件的JComponent的getPreferredSize()
方法...这里有很多可能性并且为了获得更好的帮助,你需要告诉我们很多这个类的更多细节,你的GUI和你的问题。
答案 1 :(得分:2)
当你的类层次结构中调用构造函数,方法等时,它必须这样做。它与确切找到该代码的位置有关。
基本上,您期望被调用的方法或构造函数可能尚未达到您预期的程度。在所有方法中放置system.out(或使用调试器)以查看以什么顺序调用的代码。我可以向你保证在你没有调用代码之前调用你想要调用的代码,之后调用它。这将是由于您的类层次结构中的代码调用方式。