データモデルの元になるデータを変更する
広告
データモデルに登録するデータを変更する方法を確認します。SpinnerListModelクラスで用いされている「setList」メソッドを使います。
setList public void setList(List<?> list)
このシーケンスを定義するリストを変更し、モデルの value のインデックスを 0 にリセットします。list はコピーされません。モデルは list への参照を格 納するだけです。 list が現在のリストと異なる場合、このメソッドは ChangeEvent をトリガー します。 パラメータ: list - このモデルが表すシーケンス 例外: IllegalArgumentException - list が null、または長さが 0 の場合
引数にデータモデルに登録する新しいデータを格納したListインターフェースを実装したクラスのオブジェクトを設定します。
実際の使い方は次のようになります。
ArrayList<String> data = new ArrayList<String>(); data.add("男性"); data.add("女性"); SpinnerListModel model = new SpinnerListModel(data); JSpinner spinner = new JSpinner(model); ArrayList<String> anotherdata = new ArrayList<String>(); data.add("Man"); data.add("Woman"); model.setList(anotherdata);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*; import java.awt.Dimension; import java.awt.BorderLayout; import java.util.ArrayList; import java.awt.event.*; public class JSpinnerTest9 extends JFrame implements ActionListener{ SpinnerListModel model; JRadioButton radio1; JRadioButton radio2; ArrayList<String> japaneseData; ArrayList<String> englishData; public static void main(String[] args){ JSpinnerTest9 frame = new JSpinnerTest9(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } JSpinnerTest9(){ japaneseData = new ArrayList<String>(); japaneseData.add("コーヒー"); japaneseData.add("紅茶"); japaneseData.add("牛乳"); englishData = new ArrayList<String>(); englishData.add("coffee"); englishData.add("tea"); englishData.add("milk"); model = new SpinnerListModel(japaneseData); JSpinner spinner = new JSpinner(model); spinner.setPreferredSize(new Dimension(100, 25)); JPanel p = new JPanel(); p.add(spinner); radio1 = new JRadioButton("日本語", true); radio1.addActionListener(this); radio1.setActionCommand("japanese"); radio2 = new JRadioButton("英語"); radio2.addActionListener(this); radio2.setActionCommand("english"); ButtonGroup group = new ButtonGroup(); group.add(radio1); group.add(radio2); JPanel radioPanel = new JPanel(); radioPanel.add(radio1); radioPanel.add(radio2); getContentPane().add(radioPanel, BorderLayout.PAGE_START); getContentPane().add(p, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("japanese")){ model.setList(japaneseData); }else if (cmd.equals("english")){ model.setList(englishData); } } }
上記をコンパイルした後で実行すると次のように表示されます。
画面上部にあるラジオボタンを変更すると、ラジオボタンに合わせてスピナーのデータモデルを変更します。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。