2

javax.swing.ListModel複数の 間で共有したいjavax.swing.ComboBoxModel

次のコードでJComboBoxは、実行中のプログラムでビューから項目を選択すると、JComboBox常に最初の項目が選択された状態で表示されます。

public class DelegatedComboBoxModel<T> extends AbstractListModel<T> implements
    ComboBoxModel<T> {

  protected ListModel<T> listModel;
  protected Object selectedObject;

  ListDataListener listDataChangeDelegater = new ListDataListener() {

    @Override
    public void intervalRemoved(ListDataEvent e) {
      fireIntervalRemoved(DelegatedComboBoxModel.this, e.getIndex0(),
          e.getIndex1());
    }

    @Override
    public void intervalAdded(ListDataEvent e) {
      fireIntervalAdded(DelegatedComboBoxModel.this, e.getIndex0(),
          e.getIndex1());

    }

    @Override
    public void contentsChanged(ListDataEvent e) {
      fireContentsChanged(DelegatedComboBoxModel.this, e.getIndex0(),
          e.getIndex1());
    }
  };

  public DelegatedComboBoxModel(ListModel<T> listModel) {
    // DefaultComboBoxModel<E>
    this.listModel = listModel;
    if (listModel.getSize() > 0) {
      selectedObject = listModel.getElementAt(0);
    }
    listModel.addListDataListener(listDataChangeDelegater);
  }

  @Override
  public T getElementAt(int index) {
    if (index >= 0 && index < listModel.getSize())
      return listModel.getElementAt(index);
    else
      return null;
  }

  @Override
  public int getSize() {
    return listModel.getSize();
  }

  @Override
  public void setSelectedItem(Object anObject) {
    if ((selectedObject != null && !selectedObject.equals(anObject))
        || selectedObject == null && anObject != null) {
      selectedObject = anObject;
      fireContentsChanged(this, -1, -1);
    }
  }

  @Override
  public Object getSelectedItem() {
    return selectedObject;
  }

}

上記のコードで何が問題になったのかわかりません。

コードを修正するには?

DefaultComboBoxModel(制限:サードパーティのライブラリを使用、サブクラス化、または使用しないでください。)

4

0 に答える 0