作为CellRenderer的JComboBox未设置正确的值

时间:2011-06-17 12:21:33

标签: swing jtable jcombobox tablecellrenderer

我在JTable中使用JComboBox作为CellRenderer 一切正常,JComboBox显示相应行的正确项目。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

查看渲染器的源代码。

  1. 我认为您不必按名称查找产品。传递给您<{>>的value 是产品,它来自您的表格模型(如果它已正确实施)。只需将value设置为所选项目即可。

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

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

答案 1 :(得分:1)

听起来你在组合框中保存和显示值,而不是从表的模型中显示。设置值并保存组合框值时,需要更新模型