【问题标题】:Suggestion on how to debug ComboBoxModel关于如何调试 ComboBoxModel 的建议
【发布时间】:2011-10-28 08:28:38
【问题描述】:

在我的项目中,我有几个带有自定义模型的 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. getElementAt 方法在单击 JComboBox 时被多次调用并返回所有可用值(包括新值)。
  3. 当我点击 JComboBox 并返回正确的更新值时调用 getSize() 方法
  4. 如果 JComboBox 有焦点,我可以使用箭头选择可用项目,并且所有项目都是可选的(甚至是添加的项目)。
  5. 如果我使用鼠标在显示的空白菜单上随机单击一个点,则可以选择所有最后一个可用条目。

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

【问题讨论】:

  • 添加项目后可能会调用combo.revalidate()。
  • @toto: 我试过但重新验证没有解决问题
  • 试过不同的平台?还是不同的外观?
  • @toto:即使改变外观和感觉也没有任何改变
  • 这个想法对我有用stackoverflow.com/questions/6261017/…,但是你编码的东西太难了,如果 TableCell 失去焦点,你忘记从 JComboBox 中删除的侦听器之间可能存在冲突,:-) 没有办法sscce :-)

标签: java debugging swing jcombobox comboboxmodel


【解决方案1】:

我知道我的问题有点模糊

这就是为什么需要 SSCCE。

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

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

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

【讨论】:

  • 正确的建议,使用 CellListener + 1 的解决方法
  • @camickr:+1。我想你是对的。即使应该可以编写自定义模型,在这种情况下,TableModelListener 可能会更好。我没想到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多