• 締切済み

JTable TableChangedメソッド

度々度々申し訳ないです ファイルの情報(ファイル名、更新日時、パスなど)が入ったArrayListの情報をJTableに出力?したいのですが、だんだんArrayListの要素数(ファイルの数)そふやしていくのでその都度JTableを更新したいです。 前別の質問で答えてくれた方はfire~というメソッド(fireModelChangedメソッドと勝手に判断)を使って、更新しなければいけないと言っていたのですが、使い方がいまいちわかりません。 fireTableChangedとtableChangedの関係というか,それが何なのかさえわかりません。調べ方が悪いのか...... よければそこら辺教えてください。

みんなの回答

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

fire~というメソッド といったのは、いくつか種類があり、それぞれ状況によって使い分ける必要があるためです。 いまはちょっと資料が見れないので詳細には記述できませんが、 ・テーブルの構造そのものが変わった場合 ・行が増えたり減ったりした場合 ・特定のセルの表示内容に変更があった場合 など、状況による使い分けが必要です。 適切なものを使わないと、更新が反映されなかったり、 画面がちらついたり、選択範囲かがリセットされたり などの弊害がでてきます。 まあ、細かいことを気にしなければ、テーブル構造の変化の通知をすれば、 とりあえず内容は反映されます。 それと根本的な話ですが、これらのメソッドは、イベントを発生させるものです。 例えば、ボタンを押したときの動作でActionListenerをボタンに登録し、 actionPerformedを実装し、ボタンをが押されたことを知らされますが、 これと同じようなことが起こっています。 JTableがTableModelに対しリスナー登録を行い、 TableModelがイベントをJTableに通知しています。

domybestatall
質問者

補足

addTableModelListenerできるのはTableModelに対してで TableModelListenerをimplementsするのもTableModelで....... こんがらがってしまうのです(TдT) ActionListenerはちゃんと別のクラスにListenerをimplementsしてできたんですが。。。。 ~JTableのインスタンスを生成したクラス~ table.getModel().addTableModelListener(); ~別のクラス~ public class TableModel extends AbstractTableModel implements TableModelListener{ //いろいろ @Override public void tableChanged(TableModelEvent e) { //ここに書いた処理が更新時に行われる } } (ここまでがあってるのかわかりませんが)ここまでは来るのですが、更新のGOサインをだれが出すのかがよくわかんなくて(ここでfire~??)、今作っているプログラムではドラッグされた時に更新したいんです。 ただfireTableChangedをドラッグの処理のところに貼るんじゃもちろんダメなんでしょうけど(TдT) ここまで教えてもらっているのにわがままというか、自分の理解力が至らないばかりに何度も申し訳ないですm(_ _)m

関連するQ&A