2011-06-17 49 views
0

我在我的JTable中使用JComboBox作为CellRenderer。
一切工作正常JComboBox显示相应行的正确项目。JComboBox as CellRenderer没有设置正确的值

我目前正在处理的问题是,当我在JComboBox中选择一个新值(例如第9行)时,该值设置正确,但是当我尝试更改下一行中的值时,JComboBox(例如在第10行)自动设置之前的行的值。

我创建了一个DropDownCellRenderer类,它扩展了JComboBox并实现了TableCellRenderer,我认为这已经足够,但似乎DropDownCellRenderer对象对于每一行都是相同的。

table.getColumnModel().getColumn(3).setCellRenderer(new DropDownCellRenderer()); 
table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(new DropDownCellRenderer())); 

我该如何避免每行都使用相同的对象?

+0

您的渲染器实现可能不正确,我们可以看到它吗? – 2011-06-17 15:33:08

回答

2

查看您的渲染器的源代码。

  1. 我不认为你必须按名称查找产品。 value传给你产品,它来自您的表模型(如果它正确实施)。只需将value设置为选定项目,它就可以工作。

  2. 要使渲染器正常运行,请根据isSelected参数更改其前景色和背景色。代码应该如下所示:

    if (isSelected) { 
        setForeground(table.getSelectionForeground()); 
        super.setBackground(table.getSelectionBackground()); 
    } else { 
        setForeground(table.getForeground()); 
        setBackground(table.getBackground()); 
    } 
    
  3. 使您的初始值的数组成为构造函数的参数。这会将您的渲染器转换为通用组合框渲染器。

1

听起来好像是在组合框本身而不是表格模型中保存和显示值。当您设置一个值并保存组合框值时,您需要更新模型