0

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

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

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

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

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

4

2 回答 2

2

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

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

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

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

于 2011-06-18T15:37:40.193 回答
1

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

于 2011-06-17T17:43:34.807 回答