モデルクラスの基本操作
JTextFieldにテキストを入力してEnterすると、その項目がJListに追加される。 |
ここでは、JTextFieldにテキストを書いてEnterキーを押すと、それがJListに追加されます。JTextFieldに組み込んであるActionListenerを利用しているのですね。ここでは、actionPerformedで組み込みの処理をしています。
まずは、モデルを作成し、組み込んでいる部分を見てみましょう。new DefaultListModelでモデルクラスのインスタンスを作成した後、以下のようにしてモデルに表示項目を追加しています。
model.addElement("Windows");
model.addElement("Linux");
model.addElement("Mac OS X");
この「addElement」は、モデルの末尾に項目を追加する働きをするメソッドです。この他、指定した場所に追加をする「insertElement」や、指定した項目を削除する「removeElement」といったメソッドも用意されています。これらの使い方を覚えれば、モデル内の項目を自由に操作できるようになるでしょう。
作成したモデルは、new JListする際に引数として渡すと、このモデルを使ってJListに項目を表示するようになります。後から設定したい場合には、JListの「setModel」というメソッドを利用することで、特定のモデルをJListに設定することができます。
さて、実際に項目を操作しているactionPerformedを見ましょう。こちらでは、JTextFieldからgetTextしたStringを「model.addElement(s);」という形で追加しています。モデルのインスタンスをフィールドとして保管しておけば、このようにいつでも項目を操作することができるというわけです。
JListの項目はStringと決まってはいない!
JListとListModelを利用する場合、一つ頭に入れておきたいのは、「保管される項目の情報」についてです。ここまで、何の説明もなくStringの値を使ってきましたが、実は項目として扱えるのはStringと決まっているわけではありません。
各種の項目を扱うメソッド類が、すべて項目データを「Object」インスタンスとして扱っていたことに気づいたでしょうか。そう、項目のデータとして利用できるのは、Objectおよびそれを継承したクラスなのです。すなわち、どんなクラスのインスタンスでも、項目として利用することができるのです。
ただし、そのままインスタンスを組み込んだとしても、それだけではいろいろと問題が生じます。例えば、表示はどうなるのか、項目のデータを取り出して利用する場合はどうするか、といった問題です。こうした点を踏まえて、全体を設計する必要があります。