在处理与使用此类相关的事情时,我发现了这段代码:
public Dimension getPreferredSize() {
Dimension size;
if (this.getText() == null || this.getText().isEmpty()) {
setText( " " );
size = super.getPreferredSize();
setText( "" );
}
else {
size = super.getPreferredSize();
}
return size;
}
我确实明白这个类是一个JLabel,可以使用标签进行渲染。 但是为什么在这个 getter 期间被初始化(如果不是)? 仅在构造函数上执行此操作不是更有意义吗?
通过阅读源代码
你可以看到解释这种行为的评论:
/**
77: * Returns preferredSize of the renderer
78: *
79: * @return preferredSize of the renderer
80: */
81: public Dimension getPreferredSize()
82: {
83: if (this.getText() != null && ! this.getText().equals(""))
84: return super.getPreferredSize();
85: else
86: {
87: // If the combo box option's text is empty or null, it won't size
88: // properly (ie, it'll be way too short)... so we throw in a dummy
89: // space to trick the superclass's sizing methods.
90: String oldText = this.getText();
91: this.setText(" ");
92: Dimension d = super.getPreferredSize();
93: this.setText(oldText);
94: return d;
95: }
96: }