0

私のアプリケーションでは、3つのコンボボックスがあり、それぞれに同じアイテムのリストが含まれていますが、それぞれ異なるアイテムを選択できます。新しいアイテムを追加できるボタンもあります。追加すると、3つのコンボボックスすべてに追加する必要があります。この新しく追加されたアイテムは、コンボボックス3の選択アイテムにもなりますが、コンボボックス1および2で選択されたアイテムになります。変更しないでください。

3つのコンボボックスすべてが同じを共有する必要があるかどうかを判断しようとしていDefaultComboBoxModelます。これにより、新しく追加されたアイテムが各コンボに表示されやすくなりますが、JListとは異なり、それを台無しにするような個別のリスト選択モデルはありません。

ただし、JComboBoxModelのJavadocには次のように書かれています。

選択したアイテムは、必ずしも基になるListModelによって管理されるとは限りません。この互いに素な動作により、モデル内の選択されたアイテムの一時的な保存と取得が可能になります。

つまり、選択したアイテムに別のメカニズムを使用できるということですか。上記の文が何を意味するのかわかりません。

4

1 に答える 1

1

JComoboBoxModel紹介する方法はgetSelectedItem()とだけなsetSelectedItem(Object anItem)ので、ノーと言います。

基本的に、各モデルのデータを単一の共有リストに配置できます。DefaultComboBoxModel次に、このデータリストを使用するコンボボックスモデルの3つの新しいインスタンスを作成できます(独自の実装を使用するか、シードを使用します)。次に、これらは各コンボボックスに個別に適用されるため、各コンボボックスには独自のモデルがあります。

List sharedData = //... Create a list of data...
JComboBox box1 = new JComboBox(new MyComboBoxModel(list));
JComboBox box2 = new JComboBox(new MyComboBoxModel(list));
JComboBox box3 = new JComboBox(new MyComboBoxModel(list));

MyComboBoxModel

public class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {

    private List data;
    private Object selectedItem;
    public MyComboBoxModel(List dat) {
        this.data = data;
    }

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

    @Override
    public Object getElementAt(int index) {
        return data.get(index);
    }

    @Override
    public void setSelectedItem(Object anItem) {
        selectedItem = anItem;
    }

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

}

それがあなたが持っているものであれば、あなたは同じように簡単に配列を使うことができます

于 2012-11-03T19:55:40.700 に答える