如果文本不存在或使用 getPreferredSize() 为空,为什么 BasicComboBoxRenderer 设置文本两次?

问题描述 投票:0回答:1

在处理与使用此类相关的事情时,我发现了这段代码:

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 期间被初始化(如果不是)? 仅在构造函数上执行此操作不是更有意义吗?

java swing java-17 renderer
1个回答
0
投票

通过阅读源代码

你可以看到解释这种行为的评论:

  /**
  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:   }
© www.soinside.com 2019 - 2024. All rights reserved.