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の表示値を更新することです。

1つのケースを除いて、実装したモデルではすべて正常に動作し、数時間のデバッグ後も解決できません。バグのあるモデルのコードは他のモデルとほとんど同じです。おそらくそれは私のコードのどこかにあるバグですが、どこにあるのかわかりません。

間違ったケースでは、次の動作が発生します。最初にいくつかの値を含むテーブルを作成したとき、これらはJComboBoxでも正しく表示されますが、新しい行を追加すると、表示される値はすべて空白になります(表示される空白のメニューのサイズは正しいです) 。私はそれを見出した:

  1. jtableの新しい行が正しく追加されます。
  2. getElementAtメソッドは、JComboBoxをクリックすると数回呼び出され、使用可能なすべての値(新しい値を含む)を返します。
  3. JComboBoxをクリックして正しい更新値を返すと、getSize()メソッドが呼び出されます。
  4. JComboBoxにフォーカスがある場合は、矢印を使用して使用可能なアイテムを選択でき、すべてのアイテム(追加されたアイテムも含む)を選択できます。
  5. 表示された空白のメニューでランダムに1点をクリックしてマウスを使用すると、最後に使用可能なすべてのエントリを選択できます。

誰かアイデアはありますか?このような状況でどのようにデバッグできるかを教えてください。残念ながら、SSCCEを投稿することはできません。とにかく誰かが助けてくれることを願っています。

4

1 に答える 1

2

私の質問は少し漠然としていることを知っています

そのため、SSCCEが必要です。

各コンボボックスには、既存のJTableの特定の列のすべての値が表示されます。

カスタムモデルが必要な理由がわかりません。TabelModelListenerを使用する必要があると思います。

値が追加/削除されるたびに、コンボボックスが更新されます。

于 2011-08-17T00:15:34.377 に答える