我很难理解某个值的来源,它在Java库的BorderLayout
类中。
有以下代码:
if ((c=getChild(NORTH,ltr)) != null) {
c.setSize(right - left, c.height);
Dimension d = c.getPreferredSize();
c.setBounds(left, top, right - left, d.height);
top += d.height + vgap;
}
我正在使用Eclipse。它的调试器告诉我“c.height”等于0。我认为这很奇怪,因为几行之后“d.height”的值大于900。
然后我得到了一个条件断点,当d.height〉900时,它会暂停执行。这个断点在c.setBounds(left, top, right - left, d.height);
行中有效,但我在c.getPreferredSize();
方法中也得到了一个条件断点,它具有相同的条件,但什么也没有发生。
下面是www.example.com的代码Component.java,其中包含“getPreferredSize()”方法:
@Deprecated
public Dimension preferredSize() {
/* Avoid grabbing the lock if a reasonable cached size value
* is available.
*/
Dimension dim = prefSize;
if (dim == null || !(isPreferredSizeSet() || isValid())) {
synchronized (getTreeLock()) {
prefSize = (peer != null) ?
peer.getPreferredSize() :
getMinimumSize();
dim = prefSize;
}
}
return new Dimension(dim);
}
所以我问自己:这个价值从何而来?
我希望在getPreferredSize()方法中赋值,但是其中的条件断点不会挂起线程,尽管它与BorderLayout类中的另一个条件断点具有相同的条件。
1条答案
按热度按时间wtzytmuj1#
现在我知道问题所在了,调试器让我想到,类“www.example.com“中的“getPreferredSize”方法Component.java计算值,因为示例的类型是Component。
事实上,来自类“www.example.com“的方法Container.java是负责的,因为它覆盖了组件的方法。
但是谢谢你阅读我的文字!