0

ユーザーがドロップダウン ボックスから選択できるようにする Fruit and Vedg アプリケーションを作成しています。ArrayList ではなく String[] を使用すると、JComboBox subComboBox に値が入力されます。私が見ることができる考えや文書はありますか?以下のコードでは、subComboBoxは空です。

public class FruitAndVedg extends JFrame implements ActionListener, ItemListener {

private static final long serialVersionUID = 4L;
private JComboBox mainComboBox;
private JComboBox subComboBox;
private ArrayList item;
private Hashtable<ArrayList<Object>, Object> subItems = new Hashtable<>();

public FruitAndVedg() {
    item = new ArrayList();
    item.add("Select Item");
    item.add("Fruit");
    item.add("Vedg");

    mainComboBox = new JComboBox(item.toArray());
    mainComboBox.addActionListener(this);
    mainComboBox.addItemListener(this);
    getContentPane().add(mainComboBox, BorderLayout.WEST);

    subComboBox = new JComboBox();
    subComboBox.setPrototypeDisplayValue("XXXXXXXXXX");

    getContentPane().add(subComboBox, BorderLayout.CENTER);
    String[] subItems1 = {"Select Fruit", "Apple", "Plum"};
    subItems.put(item, subItems1);

    String[] subItems2 = {"Select Vedg", "Carrot", "Peas"};
    subItems.put(item, subItems2);
}

@Override
public void actionPerformed(ActionEvent ae) {
    String item = (String) mainComboBox.getSelectedItem();
    Object o = subItems.get(item);
    if (o == null) {
        subComboBox.setModel(new DefaultComboBoxModel());
    } else {
        subComboBox.setModel(new DefaultComboBoxModel((String[]) o));
    }
}

@Override
public void itemStateChanged(ItemEvent ie) {
    if (ie.getStateChange() == ItemEvent.SELECTED) {
        if (ie.getSource() == mainComboBox) {
            if (mainComboBox.getSelectedIndex() != 0) {
            }
        }
    }
}

  public static void main(String[] args) {
    JFrame frame = new FruitAndVedg();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}
}

エラー メッセージは報告されていません。

4

1 に答える 1

1

ArrayList ではなく String[] を使用すると、JComboBox subComboBox に値が入力されます。

デフォルトの ComboBoxModel は ArrayList をサポートしていません。

ベクターを使用できます。

本当に ArrayList を使用したい場合は、カスタム モデルを作成する必要があります。または、ループを作成して、ArrayList の項目を一度に 1 つずつモデルに追加します。カスタム モデルの作成はそれほど難しくありません。DefaultComboBoxModel のコードをコピーし、ベクターの代わりにリストを使用するようにコードを変更するだけです。

于 2013-04-09T16:11:13.000 に答える