繁体   English   中英

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

[英]Modify cell editor for different rows in a JTable

我有一个带有以下列的JTable

rowNumber | 元素| 数量

还有一个JButton ,它会在每次单击时添加行。 列Element有一个自定义的JComboBox单元格编辑器,它可以填充数据库中的元素。 但是我需要做以下事情:

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

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

像这样创建一个自定义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);
   }
});

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM