SwingのJListを使って、一覧を表示。ユーザーが選択できるようにしてみます。
VB/C#では、ListBoxコントロールに相当するコンポーネントです。
Swing JListクラスを使ってユーザーが選択できるようにするサンプル
果物のリストを表示して、ユーザーが選択できるようにします。
画面起動時に、「バナナ」をデフォルトで選択。
ユーザーが違う果物を選択した際に、選択された果物のインデックスと名前を標準出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import java.awt.HeadlessException; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class JListTestFrame extends JFrame implements ListSelectionListener { private JList jlist = null; private int lastIndex = -1; public JListTestFrame() throws HeadlessException { //画面タイトルを設定 super("リストのテスト"); //リストのデータを準備 String[] listArray = new String[] { "メロン", "りんご", "バナナ", "いちご" }; //チェックボックスを用意 jlist = new JList(); //リストにデータをセット jlist.setListData(listArray); //バナナを初期選択する lastIndex = 2; jlist.setSelectedIndex(lastIndex); //ユーザーの選択方法を指定 jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //チェックボックスのリスナーを登録 jlist.addListSelectionListener(this); //ContentPaneにチェックボックスを配置 getContentPane().add(jlist); } @Override public void valueChanged(ListSelectionEvent event) { if(lastIndex != jlist.getSelectedIndex()) { System.out.println("選択されたよ♪ インデックス=" + jlist.getSelectedIndex() + ",値=" + jlist.getSelectedValue()); lastIndex = jlist.getSelectedIndex(); } } public static void main(String[] args) { JListTestFrame frame = new JListTestFrame(); frame.setSize(320, 240); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setVisible(true); } } |
実行結果
画面に、「バナナ」が選択された状態で一覧(JList)表示されます。
また、ユーザーが違う値を選択したときに、次のように選択したインデックス、選択した値が標準出力されます。
1 | 選択されたよ♪ インデックス=3,値=いちご |
サンプルの解説
JListを使うことで、一覧表示、選択が簡単にできます♪
また、今回は1つだけを選択させるようにJList#setSelectionMode(int)で指定していますが、次のように複数を選択することもできます。
・1行だけ選択させる(ListSelectionModel.SINGLE_SELECTION)
・1つの連続した行だけ選択させる(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
・複数行を選択させる(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)