JTable中JComboBox中的对象与组合列表中的同一对象无关

时间:2014-08-04 13:09:45

标签: java swing jcombobox

我的问题是,当我将Cell放入单元格中并将CellEditor设置为JComboBox时,它很好,但是当单击单元格时我得到了包含对象的列表,但是选中的一个不是之前在单元格中的那个,但只是列表中的第一个。有没有简单的方法来解决它?

public void setValueAt(Object value, int row, int col) {
    data.get(row).values.set(col, (Device) value);
    fireTableCellUpdated(row, col);
}

for(int i = 0; i < deviceTable.getModel().getColumnCount(); i++){

        ExtendedAbstractTableModel model = (ExtendedAbstractTableModel) deviceTable.getModel();

        JComboBox<Device> combo = new JComboBox<Device>();

        for(Device value : model.columnsCombo.get(i)){
            combo.addItem(value);
        }

        TableColumn columnModel = deviceTable.getColumnModel().getColumn(i);
        columnModel.setCellEditor(new DefaultCellEditor(combo));
}

2 个答案:

答案 0 :(得分:1)

如此example所示,DefaultCellEditor会为您处理此问题。您正在循环中添加多个实例;单个实例可以处理整个列。 DefaultCellEditor通过覆盖嵌套EditorDelegate中的setValue()来工作。目前尚不清楚您是如何击败此功能的,但了解默认设置可能会引导您的搜索。

public void setValue(Object value) {
    comboBox.setSelectedItem(value);
}

答案 1 :(得分:0)

最后我发现了什么问题。我没有在我的班级中覆盖相同的方法,这就是为什么这些组件无法识别相同的项目。无论如何,谢谢大家。