使用TableModelListener设置JComboBox编辑器

时间:2017-04-29 12:38:38

标签: java swing jtable jcombobox tablecelleditor

我想使用JComboBox将我的第二列设置为TableModelListener编辑器。还想根据第1列中选定的ComboBox更改第2列中ComboBox的模型。在这里,我实现了一个听取第1列的听众。

private class TableScheduleListener implements TableModelListener
{
    //Listening for data changes.
    @Override
    public void tableChanged(TableModelEvent e) 
    {
        int row = e.getFirstRow();
        int column = e.getColumn();
    }

    if(column == 1)
    {
            for(int i = 0; i < createScheduleView.tblSchedule.getRowCount(); i++)
            {
                createScheduleView.tblSchedule.getCellEditor(i, 2);
            }

            int col = createScheduleView.tblSchedule.convertColumnIndexToModel(2);

            if(col == 2 && createScheduleView.tblSchedule.getRowCount() < 7)
            {
                DefaultComboBoxModel cbModel = new DefaultComboBoxModel(createScheduleModel.setData().toArray());
                createScheduleView.cbBreakStartTime.setModel(cbModel);
            }
     }
}

但是我想在第二栏中如何将JComboBox设置为编辑器。设置完之后的型号?任何帮助都会受到赞赏。

更新

我关注https://tips4java.wordpress.com/2009/06/28/combo-box-table-editor/的camickr提示 但是想要从不同的类中覆盖TableCellEditor

private class TableScheduleEditor extends JTable
{
    //  Determine editor to be used by row
    @Override
    public TableCellEditor getCellEditor(int row, int column)
    {
        int modelColumn = convertColumnIndexToModel(column);

        if(modelColumn == 2 && row < 7)
        {
            DefaultComboBoxModel model = new DefaultComboBoxModel(createScheduleModel.setData().toArray());
            createScheduleView.getCbBreakStartTime().setModel(model);
            return new DefaultCellEditor(createScheduleView.getCbBreakStartTime());
        }

        else
            return super.getCellEditor(row, column);
    };
}

我在想这个课程如何在我的JTable中注册? 我试图在我的构造函数this.createScheduleView.tblSchedule.setCellEditor(new TableScheduleEditor());中注册它 但它表示无法转换为TableCellEditor,因为它扩展了JTable。这样做的任何技巧?

1 个答案:

答案 0 :(得分:2)

  

还想根据第1列中选定的ComboBox更改第2列中的ComboBox模型

覆盖getCellEditor(...)的{​​{1}}方法以返回相应的编辑器。

这是一个帮助您入门的基本示例:

JTable

在上面的示例中,“模型”会根据正在编辑的行进行更改。

在您的情况下,您需要修改逻辑以根据第一列中的值返回编辑器。