JListに読み込ませるデータはListModelを実装すればいいのですが、そのままだとデータを更新したことを通知できないので動的にJListに表示されている要素を更新できません。

AbstractListModelにはイベントの発生をリスナーに通知するメソッドが実装されているので、JListだけ使う場合は、これか、またはこれのサブクラスにあたるDefaultListModelを継承してやればいいのですが、今回考えているデータモデルはListModelだけでなくTableModelも実装したいので、なんとなくListModel直系という感じのは避けたい雰囲気なのです・・・。そういうわけでListModelを実装して内部でArrayListに委譲している感じなんですが、このままでは先に述べたように動的にViewを更新できないので、イベント通知のメソッドfireContentsChangedとfireIntervalAddedとfireIntervalRemovedを実装します。これらのメソッドは単純にイベントオブジェクトを作って、登録されているリスナーのメソッドに引数で渡してやるだけです。

でよくわからなかったのは、JListはListDataListenerを実装してないのに、モデルを追加しただけでイベントが通知されているように見えることです。ListDataListenerを実装してたらコンストラクタでthis.getModel().addListDataListener(this)みたいにしてるのだろうと思うのですが、よくわかりません。ので渋々ソースをみたら、ListDataListenerを実装している内部クラスを作ってました・・・。うーむこういうやり方があるのか・・・


CategoryJava


|New|Edit|Freeze|Diff|History|Attach|Copy|Rename|
Last-modified: 2004-07-28 (Wed) 00:00:00
HTML convert time: 0.009 sec.