2

在我的项目中,我有几个带有自定义模型的 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 中也能正确显示这些值,但是当我添加新行时,显示的值全部变为空白(显示的空白菜单的大小是正确的) . 我发现:

  1. jtable 的新行已正确添加。
  2. 当单击 JComboBox 并返回所有可用值(包括新值)时,会多次调用 getElementAt 方法。
  3. 当我单击 JComboBox 并返回正确的更新值时调用方法 getSize()
  4. 如果 JComboBox 有焦点,我可以使用箭头来选择可用项目并且所有项目都是可选的(甚至是添加的项目)。
  5. 如果我使用鼠标在显示的空白菜单上随机单击一个点,则可以选择所有最后一个可用条目。

有人知道吗?你能建议我在这种情况下如何调试吗?不幸的是,我无法发布 SSCCE .. 我希望有人可以提供帮助..

4

1 回答 1

2

我知道我的问题有点含糊

这就是为什么需要 SSCCE。

每个组合框应显示现有 JTable 的特定列的所有值

我不明白您为什么需要自定义模型。我猜你只需要使用 TabelModelListener。

每当添加/删除值时,您都会更新组合框。

于 2011-08-17T00:15:34.377 回答