2015-11-24 64 views
0

我很遗憾,我确信它非常简单。非常简单的JCombobox单元格编辑器问题

我有一个带有对象的Jcombobox单元编辑器,可以说'客户'。 客户有'代码'和'描述'。 客户的toString已被覆盖返回'code'。

我在表格中有两个单元格,希望一个列出代码,一个列出说明。这两个组合框列表都填充了Customer对象,都返回CODE。我如何制作第二个组合框展示说明?

我试着创建一个新的子类,它重写toString方法并填充第二个组合框,但为了将值加载到新的子类型中,我必须重新创建数据并创建新的子类或者在'customer'对象上实现一个克隆方法,我每次添加一个新变量都必须更新。

有没有简单的方法来覆盖jcombobox渲染器?

谢谢

回答

2

是否有一种重写jcombobox渲染器的简单方法?

您需要创建自己的自定义渲染器来渲染Customer对象的特定属性。

渲染器的一般形式是:

class FooRenderer extends BasicComboBoxRenderer 
{ 
    public Component getListCellRendererComponent(
     JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
    { 
     super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 

     if (value instanceof Foo) 
     { 
      Foo foo = (Foo)value; 
      setText(foo.getDescription()); 
     } 

     return this; 
    } 
} 

退房Combo Box With Custom Renderer的更多信息和更完整的实现。

+0

谢谢。详细,正是我在找什么。 – MxMave

1

它会在toString方法中有一个条件语句吗?这似乎比重写JComboBox更容易,如果可能的话。

+0

这绝对是最简单的解决方案。有点乱,不得不为阵列中的每个元素设置它,但令人难以置信的直接向前! – MxMave