我想使用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。这样做的任何技巧?
答案 0 :(得分:2)
还想根据第1列中选定的ComboBox更改第2列中的ComboBox模型
覆盖getCellEditor(...)
的{{1}}方法以返回相应的编辑器。
这是一个帮助您入门的基本示例:
JTable
在上面的示例中,“模型”会根据正在编辑的行进行更改。
在您的情况下,您需要修改逻辑以根据第一列中的值返回编辑器。