4

我有JTable以下列:

行号 | 元素 | 数量

并且JButton每次单击时都会添加行。Element 列有一个自定义JComboBox单元格编辑器,其中填充了来自数据库的元素。但是我需要执行以下操作:

JComboBox假设我在表的第一行中有这些元素: Element1 Element2 Element3

我从第一行中选择 Element2 JComboBox,然后继续添加另一行。此新行不得在其JComboBox. 并且前(第一)行不得显示在第二行中选择的元素,依此类推。

4

2 回答 2

2

我认为了解Set<Element>. 因此,@mKorbel 引用了相关讨论,提出了可扩展性的重要问题。在这种情况下,问题提出了一个List<DefaultCellEditor>,什么时候可以使用简单的渲染器。

在这里, aCellEditor可以管理 a List<DefaultComboBoxModel<Element>>,为当前正在编辑的行选择正确的组合模型并setModel()在编辑器组件上调用。随着每个新表格行的添加,编辑器将添加一个新元素List并根据需要调整现有元素。我预计复杂度会随着O(n 2 )的增长而增长,其中nSet.

于 2012-05-24T13:21:11.103 回答
2

像这样创建一个自定义 CustomCellEditor。

final JComboBox<String> comboBox = new JComboBox<String>();
table.getColumnModel().getColumn(1).setCellEditor(new CustomCellEditor(comboBox){
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
         DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
         model.removeAllElements();
         {//Add what you need according the row.
             model.addElement("X");
             model.addElement("Y");
             model.addElement("Z");
         }
         return super.getTableCellEditorComponent(table, value, isSelected, row, column);
   }
});
于 2012-05-23T21:08:50.167 回答