DefaultListModel(項目を動的に操作する)

広告

今まではリストに表示される項目は、リストを作成する際に初期値として与えたデータしか表示出来ませんでしたが、後で追加したり削除したりと言ったリストの項目に変更を加える場合には、JListクラスの中に含まれる項目の値だけを管理するDefaultListModelクラスを使います。

DefaultListModelクラスは項目の値を集中して管理していますので、このクラスのオブジェクトに対して、項目を追加したり削除したりといった作業を行います。

まずはクラス図を見てください。

  • java.lang.Object
  • javax.swing.AbstractListModel
  • javax.swing.DefaultListModel
  • public class DefaultListModel extends AbstractListModel

コンストラクタは1つだけ用意されています。

コンストラクタ
DefaultListModel()

コンストラクタは空のものしか用意されていません。

値を管理するDefaultListModelクラスのオブジェクトを作成したら、どのJListクラスのオブジェクトでこの値の集合を使うのかを指定する必要があります。方法としては2つあり、JListのコンストラクタで引数として指定する場合と、メソッドを使ってJListのオブジェクトに対してどの値の集合を使うかを指定する場合です。

コンストラクタの引数として指定する場合には、下記のコンストラクタを使います。

指定された null 以外のモデルの要素を表示する JList を構築します。すべ
ての JList コンストラクタは、このオブジェクトに委譲します。 

パラメータ:
  dataModel - このリストのデータモデル 
例外: 
  IllegalArgumentException - dataModel が null の場合

この場合の実際の使い方は下記のようになります。

DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

また、JListクラスで用意されている"setModel"メソッドを使って、どのDefaultListModelクラスのオブジェクトを使うかを指定します。

リストの内容または「値」を表すモデルを設定し、PropertyChangeListener 
への通知後にリストの選択範囲をクリアします。 

パラメータ:
  model - 表示される項目のリストを提供する ListModel 
例外: 
  IllegalArgumentException - model が null の場合

ちなみに引数に書かれている"ListModel"はインターフェースで、DefaultListModelクラスはListModelインターフェースの実装クラスです。

この場合の実際の使い方は下記のようになります。

DefaultListModel model = new DefaultListModel();
JList list = new JList();

list.setModel(model);

また初期値を与えて作成したJListから"geModel"メソッドを使ってJListで現在使っているデータ管理クラスのオブジェクトをを取り出すこともできます。

JList コンポーネントによって表示される項目のリストを保持するデータモデ
ルを返します。

戻り値:
  表示される項目のリストを提供する ListModel

ただし、戻り値をDefaultListModelクラスのオブジェクトにキャストして利用することはできませんでした。

このメソッドを使う場合にはListModelインターフェースを自分で実装したクラスを作成するか、またはListModelインターフェースを実装した抽象クラスであるAbstractListModelクラス(DefaultListModelの親クラス)を自分で実装したクラスで利用する場合にだけ使いましょう。

( Written by Tatsuo Ikura )

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