0

シンプルなSwingに追加したいJComboBoxのですが、コンボの各アイテムに値を割り当てたいです。次のコードがあります

    JComboBox jc1= new JComboBox();
    jc1.addItem("a");
    jc1.addItem("b");
    jc1.addItem("c");

今私が欲しいのは、コンボボックスをクリックすると、a、b、cの代わりに1、2、3が返されることです。コンボ ボックスの各項目にキー値を割り当てる方法はありますか?

4

3 に答える 3

4

次のように文字列を追加する代わりに、アイテムをオブジェクトとして追加できます。

JComboBox<ItemClass> jc = new JComboBox<ItemClass>();
    jc.addItem(item1);
    jc.addItem(item2);
    jc.addItem(item3);

したがって、キーを返すには、イベントの機能は次のとおりです。jc.getSelectedItem().getKey この方法ではtoString()、クラス ItemClass の機能をオーバーライドして、コンボボックスに表示する文字列を返す必要があります。

ところで、戻り番号については、 : を試すことができjc.getSelectedIndex()ます。文字列のインデックスが返されます ( 0 1 2for "a" "b" "c")

于 2012-10-13T07:19:28.177 に答える
1

データを単純なクラスにラップします。

class MyData {
  int value;
  String text;
  ...
}

BasicComboBoxRenderer を拡張して、独自のレンダラーを記述できるようになりました。「値」を「MyData」にキャストし、テキストをレンダリングします。

public class Bla extends BasicComboBoxRenderer{

@Override
public Component getListCellRendererComponent(JList list, Object value,
        int index, boolean isSelected, boolean cellHasFocus) {
    if(value instanceof MyData) {
        setText(((MyData) value).getText());
    }
    return super.getListCellRendererComponent(list, value, index, isSelected,
            cellHasFocus);
}
}

Java7 を使用する場合は、@Taiki が示したようなジェネリックを使用することをお勧めします。これで、jc.getSelectedItem() によって選択されたオブジェクトを取得できます。常に MyData 型からのもので、テキスト ("a"、"b" など) と値 (1、2、3 など) にアクセスできます。

于 2012-10-13T09:34:12.583 に答える
1

文字列を直接追加する代わりに、独自のモデルを作成してコンボ ボックスに追加できます。

Java ComboBoxModelを確認してください。

このスレッドで詳細を確認できます

于 2012-10-13T07:18:21.753 に答える