-1

の現在のアイテムを更新する関数を作成したいJComboBox:

@Override
public void updateId(String id) {
    boolean old = notify;
    notify = false;
    comboBox.setEditable(true);
    comboBox.setSelectedItem(id);
    comboBox.setEditable(false);
    notify = old;
}

結果は次のとおりです。

画像

  1. ComboBox はテキストボックスにバインドされ、
  2. updateId() を呼び出しているテキストボックスの値を変更します。
  3. コンボボックスの展開、
  4. 変更された項目を選択すると、

コンボのドロップダウン リストには、選択した項目に加えられた変更が反映されません。この例では、ドロップダウン リストの一番下に「xxx」が表示されます。

4

1 に答える 1

1

私は誤解しJComboBox.setSelectedItem()ました。

コンボボックスが編集可能な場合、モデルの選択されたインデックスの下にあるアイテムをオーバーライドする必要があるように聞こえますが、表示された値をオーバーライドするだけで、モデルには触れません。

これは仕事をします:

    @Override
    public void updateId(String id) {
        boolean old = notify;
        notify = false;
        comboBox.setEditable(true);

        DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
        int selectedIndex = comboBox.getSelectedIndex();
        model.removeElementAt(selectedIndex);
        model.insertElementAt(id, selectedIndex);
        comboBox.setSelectedIndex(selectedIndex);

        comboBox.setEditable(false);
        notify = old;
    }
于 2012-07-05T23:43:11.040 に答える