我正在处理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.Dimensionwidth=296,height=479
java.awt.Dimensionwidth=0,height=0
我完全不知道发生了什么事。为什么这个的大小仍然是0,0?
发布于 2012-03-13 07:38:22
您可能使用了空布局,或者在呈现组件之前或在封闭的顶级窗口上调用'getSize()‘之前对组件调用了'pack()’,或者没有重写组件的JComponent的getPreferredSize()方法...这里有许多可能性,为了获得更好的帮助,你需要告诉我们lot这个类的更多细节,你的图形用户界面和你的问题。
发布于 2012-03-13 08:05:11
当构造函数、方法等在你的类层次结构中被调用时,它必须这样做。它与您确切地定位代码的位置有关。
基本上,你期望被调用的方法或构造函数可能并没有达到你期望的程度。在所有方法中放置一个system.out (或使用调试器),以查看以什么顺序调用哪些代码。我可以向你保证,你期望在代码没有被调用之前被调用的代码,它是在之后被调用的。这将取决于代码在类层次结构中的调用方式。
https://stackoverflow.com/questions/9676312
复制相似问题