修改JTable中不同行的单元格编辑器

时间:2012-05-23 20:10:11

标签: java swing jtable

我有一个JTable,其中包含以下列:

rowNumber |元素|量

一个JButton,每次点击都会添加行。列元素具有自定义JComboBox单元格编辑器,该编辑器将填充数据库中的元素。但是我需要做以下事情:

假设我在表格第一行的JComboBox中有这些元素: 部件1 元素2 元素3

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

2 个答案:

答案 0 :(得分: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);
   }
});

答案 1 :(得分:2)

我认为了解Set<Element>的预期基数可能会有所帮助。因此,@ mKorbel提出了可扩展性的重要问题,引用了这个相关的discussion。在这种情况下,当很多更简单的渲染器执行时,问题会提出List<DefaultCellEditor>

此处,CellEditor可以管理List<DefaultComboBoxModel<Element>>,为当前正在编辑的行选择正确的组合模型,并在编辑器组件上调用setModel()。在添加每个新表行时,编辑器会向List添加一个新元素,并根据需要调整现有元素。我希望复杂性增长为 O(n 2 ,其中 n Set的基数。