我有一个包含以下列的JTable
:
行数 |元素 |数量
以及每次单击时都会添加行的JButton
。元素列有一个自定义JComboBox
单元格编辑器,该编辑器填充了数据库中的元素。但是我需要执行以下操作:
假设我在表中第一行的JComboBox
中有这些元素:元素1元素2元素3
我从第一行的JComboBox
中选择 Element2,然后继续添加另一行。此新行不得再在其JComboBox
中显示 Element2。并且前一行(第一行)不得显示在第二行中选择的元素,依此类推。
我认为了解Set<Element>
的预期基数可能会有所帮助。因此,@mKorbel引用了相关的讨论,提出了可扩展性的重要问题。 在这种情况下,问题提出了一个List<DefaultCellEditor>
,当一个更简单的渲染器就可以了。
在这里,CellEditor
可以管理List<DefaultComboBoxModel<Element>>
,为当前正在编辑的行选择正确的组合模型,并在编辑器组件上调用setModel()
。添加每个新表行时,编辑器将向List
添加一个新元素,并根据需要调整现有元素。我希望复杂性增长为 O(n2),其中 n 是Set
的基数。
创建一个像这样的自定义单元格编辑器。
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);
}
});