在我的项目中,我有几个带有自定义模型的 JComboBox。基本上它们用于显示一些 JTables 列的值(因此我决定在扩展 AbstractTableModel 的相关类上实现它们)。
public class MyTableModel1 extends AbstractTableModel{
protected class MyTableComboBoxModel1 extends AbstractListModel implements ComboBoxModel{
private Object selected;
@Override
public Object getElementAt(int index) {
return getValueAt(index, 1);
}
@Override
public int getSize() {
return getRowCount();
}
@Override
public Object getSelectedItem() {
return this.selected;
}
@Override
public void setSelectedItem(Object anItem) {
this.selected = anItem;
}
}
}
我有几个模型:MyTableModel2 和 MyTableComboBoxModel2。这些模型都做了几乎相同的事情,除了一些与组合框和表格本身无关的额外操作。
所有这些东西的目的应该是根据对相关 JTable 的修改来更新 JComboBox 的显示值。
除了在一种情况下,我已经实现的模型一切正常,经过几个小时的调试,我仍然无法解决它。错误模型的代码几乎与其他模型相同。可能这是我代码中其他地方的错误,但我不知道在哪里。
错误的情况有以下行为:当我最初创建一个包含一些值的表时,即使在 JComboBox 中也能正确显示这些值,但是当我添加新行时,显示的值全部变为空白(显示的空白菜单的大小是正确的) . 我发现:
- jtable 的新行已正确添加。
- 当单击 JComboBox 并返回所有可用值(包括新值)时,会多次调用 getElementAt 方法。
- 当我单击 JComboBox 并返回正确的更新值时调用方法 getSize()
- 如果 JComboBox 有焦点,我可以使用箭头来选择可用项目并且所有项目都是可选的(甚至是添加的项目)。
- 如果我使用鼠标在显示的空白菜单上随机单击一个点,则可以选择所有最后一个可用条目。
有人知道吗?你能建议我在这种情况下如何调试吗?不幸的是,我无法发布 SSCCE .. 我希望有人可以提供帮助..