Java 使用可编辑组合框时,DefaultListCellRenderer无法正确呈现空字符串

Java 使用可编辑组合框时,DefaultListCellRenderer无法正确呈现空字符串,java,swing,render,jcombobox,Java,Swing,Render,Jcombobox,我已将自定义渲染器安装到可编辑的JCombobox,但在渲染空字符串时遇到问题您知道如何以正确/相似的高度显示空项吗?还是这是一个Java错误? 有关差异,请参见以下示例和屏幕截图: 包组合; 导入java.awt.Component; 导入java.awt.GridLayout; 导入java.util.Vector; 导入javax.swing.DefaultListCellRenderer; 导入javax.swing.JComboBox; 导入javax.swing.JFrame;

我已将自定义渲染器安装到可编辑的JCombobox,但在渲染空字符串时遇到问题您知道如何以正确/相似的高度显示空项吗?还是这是一个Java错误?

有关差异,请参见以下示例和屏幕截图:

包组合;
导入java.awt.Component;
导入java.awt.GridLayout;
导入java.util.Vector;
导入javax.swing.DefaultListCellRenderer;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.SwingUtilities;
公共类MyComboBox{
私有最终类CustomCellRenderer扩展了DefaultListCellRenderer{
私有静态最终长serialVersionUID=1L;
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、布尔isSelected、布尔cellHasFocus){
getListCellRenderComponent(列表、值、索引、isSelected、cellHasFocus);
归还这个;
}
}
私有向量listSomeString=新向量();
私有JComboBox-someComboBox=新的JComboBox(listSomeString);
private JComboBox editableComboBox=新的JComboBox(listSomeString);
私有JComboBox non_EditableComboBox=新JComboBox(listSomeString);
私有JFrame;
公共邮箱(){
添加(“”);
添加(“-”);
添加(“滑雪板”);
添加(“划船”);
添加(“编织”);
添加(“快速读取”);
setPrototypeDisplayValue(“快速读取”);
someComboBox.setEditable(true);
editableComboBox.setPrototypeDisplayValue(“快速读取”);
editableComboBox.setEditable(true);
setRenderer(新的CustomCellRenderer());
frame=新的JFrame();
frame.setLayout(新的GridLayout(0,1,10,10));
frame.add(someComboBox);
frame.add(可编辑组合框);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
帧设置位置(100100);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
MyComboBox aCTF=新的MyComboBox();
}
});
}
}

JComboBox
不使用
DefaultListCellRenderer
。如果你打电话

System.out.println(editableComboBox.getRenderer());
您会注意到,
JComboBox
使用了
basicmboboxrenderer

你只要把它改成

private final class CustomCellRenderer extends BasicComboBoxRenderer{
  private static final long serialVersionUID = 1L;

  @Override
  public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    return this;
  }
}
私有最终类CustomCellRenderer扩展了BasicComboxRenderer{
私有静态最终长serialVersionUID=1L;
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、布尔isSelected、布尔cellHasFocus){
getListCellRenderComponent(列表、值、索引、isSelected、cellHasFocus);
归还这个;
}
}
private final class CustomCellRenderer extends BasicComboBoxRenderer{
  private static final long serialVersionUID = 1L;

  @Override
  public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    return this;
  }
}