コンボボックス JComboBox の使い方
コンボボックスというのは、複数の選択肢を表示する基本的なドロップダウンリストに加えて、 リスト内のテキストを編集する機能を併せ持ったドロップダウンリストのことです。
コンボボックスは JComboBox クラスで利用できます。
この画面のコードは次のようになります。
package com.keicode.java.testapp;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class JComboBoxTest extends JFrame {
JComboBox<String> comboBox;
public JComboBoxTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(300,150);
comboBox = new JComboBox<>();
comboBox.addActionListener( new SelectActionListener() );
comboBox.addItem("California");
comboBox.addItem("Texas");
comboBox.addItem("Hawaii");
add(comboBox);
}
class SelectActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String s = comboBox.getItemAt(comboBox.getSelectedIndex());
System.out.println(s);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JComboBoxTest app = new JComboBoxTest();
app.setVisible(true);
}
});
}
}
JComboBox の作成時には、リストに追加する項目の型を指定します。
ここでは文字を追加しているので、JComboBox<String> として、「String をリストとして持つコンボボックス」を宣言しています。
選択項目が変わったときのイベント処理では、getSelectedIndex メソッドで選択された項目のインデックスを取得して、getItemAt メソッドでそのインデックスにある項目を取得しています。
コンボボックスの項目の編集
次は項目を自由に入力する場合を考えます。
コードは次のようになります。全体的には上記と同様なので、変更点を示します。
package com.keicode.java.testapp;
...
import javax.swing.ComboBoxEditor;
...
@SuppressWarnings("serial")
public class JComboBoxTest extends JFrame {
JComboBox<String> comboBox;
public JComboBoxTest() {
...
comboBox = new JComboBox<>();
comboBox.setEditable(true);
comboBox.addActionListener( new SelectActionListener() );
comboBox.addItem("California");
comboBox.addItem("Texas");
comboBox.addItem("Hawaii");
add(comboBox);
}
class SelectActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(!e.getActionCommand().equals("comboBoxChanged")) {
return;
}
ComboBoxEditor editor = comboBox.getEditor();
System.out.println(editor.getItem());
}
}
...
}
setEditable メソッドに true を渡すことで、編集可能モードにします。
選択されている項目、または入力された値を取得するには、アクションリスナーにて ComboBoxEditor を取得して、それの getItem() メソッドを利用することで入力内容を取得します。
アクションリスナを設定して、項目を編集すると comboBoxChanged と comboBoxEdited の二つのイベントが発生します。 従ってここでは comboBoxChanged イベントの時だけ、コンボボックスの選択・編集内容を出力しています。