关于如何调试ComboBoxModel的建议

时间:2011-08-16 19:00:53

标签: java debugging swing jcombobox comboboxmodel

在我的项目中,我有几个JComboBox及其自定义模型。基本上它们用于显示某些JTables列的值(因此我决定在相对上实现它们) class extends extendsTableModel)。

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的显示值。

除了一种情况外,一切都适用于我已经实现的模型,经过几个小时的调试后我仍然无法解决它。窃听模型的代码几乎与其他代码完全相同。可能它在我的代码中的其他地方是一个bug,但我无法弄清楚在哪里。

错误的情况有以下行为:当我最初创建一个具有某些值的表时,即使在JComboBox中也正确显示这些值,但是当我添加新行时,显示的值将全部为空(显示的空白菜单的大小)是正确的)。 我发现了:

  1. 正确添加了jtable的新行。
  2. 在单击JComboBox时多次调用getElementAt方法并返回所有可用值(包括新值)。
  3. 当我单击JComboBox并返回正确的更新值时,调用方法getSize()
  4. 如果JComboBox具有焦点,我可以使用箭头选择可用的项目,并且所有项目都是可选择的(即使是添加的项目)。
  5. 如果我使用鼠标在显示的空白菜单上随机点击一个点,则可以选择所有最后一个可用条目。
  6. 有人知道吗?你能建议我怎么能在这种情况下调试?不幸的是我不能发布SSCCE ..我希望有人可以提供帮助..

1 个答案:

答案 0 :(得分:2)

  

我知道我的问题有点模糊

这就是需要SSCCE的原因。

  

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

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

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