- - PR -
JTableのvalueChanged()とメッセージボックスで変な動き
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-30 14:37
お世話になっております、ふくです。
掲題の件で、どなたかご教授ください。 環境 OS:Windows2000 JDK:1.4.2_10 現象: まず、JTable#valueChanged()の振る舞いは 1.新しい行がクリックで選択された場合、2回呼び出される 2.同じ行の別セルをクリックしても同メソッドは呼び出されない と、Javaのテキストに載っていました。 実際に試してもこの通りでした。 しかし、valueChanged()の中で、メッセージボックスを呼び出すようにすると 振る舞いが変わってしまいました。 1.新しい行がクリックで選択された場合、1回しか呼び出されない 2.1回だけ、同じ行の別セルをクリックすると呼び出されてしまう。 とりあえず、1回しか呼び出されない場合は問題はないのですが 同じ行の別セルをクリックした場合でも呼び出されると困ってしまいます。 何か解決方法がないか、どなたかご教授くださいませんでしょうか? 宜しくお願い致します。 以下、テーブルのソースを載せておきます。 import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.event.ListSelectionEvent; public class TestTable extends JTable { DefaultTableModel dtm = null; // コンストラクタ public TestTable( int iRow, int iColumn) { super( iRow, iColumn ); // 初期処理 init(iRow, iColumn ); } // 初期処理 public void init( int iRow, int iColumn) { // TableModelのセット dtm = new DefaultTableModel(iRow, iColumn ); this.setModel( dtm ); } // valueChanged public void valueChanged(ListSelectionEvent lse) { String strMsg = new String(); strMsg = "alert"; JOptionPane.showMessageDialog(null, strMsg, strMsg, JOptionPane.ERROR_MESSAGE); System.out.println("valueChangedが呼ばれた"); super.valueChanged(lse); } } | ||||
|
投稿日時: 2006-05-31 12:12
あまりたいした回答ではないのですが、
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/JTable.html#valueChanged(javax.swing.event.ListSelectionEvent) には、
と書かれていますので、valueChanged をオーバーライドすることは推奨されていないと思います。もっとも、私も以前 valueChanged をオーバーライドしたことはあります。JTable のソースコードを見ても valueChanged をいじってもさほどの害はなさそうな感じもしました。 目的が良く分からないのですが、クリック(による選択状態の変更)によるイベントを取得されたいのならば ListSelection とか CellEditor 関連を使ってやったほうが良いのではないでしょうか? #以下、あとで追加。 javadoc の意味は、メソッドを呼ぶな、ということを言っているだけであり、オーバーライドするな、ということではないみたいですね。ただ、JTable はゴチャゴチャの作りになっているのであまり手を入れたくない、というのが率直な感想です。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} [ メッセージ編集済み 編集者: unibon 編集日時 2006-05-31 12:16 ] | ||||
|
投稿日時: 2006-06-02 20:31
unibonさん
お返事ありがとうございます。m(__)m 目的は、行が変更された場合にエラーチェックを行い、 エラーであればメッセージを、無ければ更新処理を行いたいということです。 ですので、列の移動で処理が走ってしまうと困ってしまいます。 それと、valueChangedとListSelectionって違うのでしょうか? valueChangedの説明を見た限りでは、このメソッドがListSelectionと等価な気がしたんですが・・・ >ただ、JTable はゴチャゴチャの作りになっているのであまり手を入れたくない、というのが率直な感想です。 ↑これ大賛成です。 JTableは汎用的すぎて、もう何がなんだかわからない状態に度々なります。。 |
1