データモデルの元になるデータを変更する
広告
データモデルに登録するデータを変更する方法を確認します。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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。