データモデルの元になるデータを変更する

広告

データモデルに登録するデータを変更する方法を確認します。SpinnerListModelクラスで用いされている「setList」メソッドを使います。

このシーケンスを定義するリストを変更し、モデルの 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);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JSpinnerTest9.java

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);
    }
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

SpinnerListModelの元のデータを変更する

画面上部にあるラジオボタンを変更すると、ラジオボタンに合わせてスピナーのデータモデルを変更します。

SpinnerListModelの元のデータを変更する

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)