私のプロジェクトでは、カスタムモデルを備えたいくつかの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でも正しく表示されますが、新しい行を追加すると、表示される値はすべて空白になります(表示される空白のメニューのサイズは正しいです) 。私はそれを見出した:
- jtableの新しい行が正しく追加されます。
- getElementAtメソッドは、JComboBoxをクリックすると数回呼び出され、使用可能なすべての値(新しい値を含む)を返します。
- JComboBoxをクリックして正しい更新値を返すと、getSize()メソッドが呼び出されます。
- JComboBoxにフォーカスがある場合は、矢印を使用して使用可能なアイテムを選択でき、すべてのアイテム(追加されたアイテムも含む)を選択できます。
- 表示された空白のメニューでランダムに1点をクリックしてマウスを使用すると、最後に使用可能なすべてのエントリを選択できます。
誰かアイデアはありますか?このような状況でどのようにデバッグできるかを教えてください。残念ながら、SSCCEを投稿することはできません。とにかく誰かが助けてくれることを願っています。