回答編集履歴
3
誤記訂正
answer
CHANGED
@@ -9,6 +9,6 @@
|
|
9
9
|
> javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648)
|
10
10
|
at パッケージ名.クラス名.mouseClicked(クラス名.java:496)
|
11
11
|
|
12
|
-
「行が選択された際の振る舞い」をMouseListener(MouseClicked)で行おうとしているように見えます。何に対してのMouseClickedなのか、そのハンドラーで「選択状態でないにもかかわらずなぜTableModel#getValueAtを呼び出そうとしているのか
|
12
|
+
「行が選択された際の振る舞い」をMouseListener(MouseClicked)で行おうとしているように見えます。何に対してのMouseClickedなのか、そのハンドラーで「選択状態でないにもかかわらずなぜTableModel#getValueAtを呼び出そうとしているのか」コードがないので不明ですが、やはりそのあたりに問題があるように思えます。
|
13
13
|
|
14
14
|
ところで、選択状態の変化を捉える目的ならMouseClickedではなくListSelectionListenerを使うべきと思います。
|
2
訂正
answer
CHANGED
@@ -1,3 +1,14 @@
|
|
1
1
|
Model全体を置き換えるのではなくModelの変更(追加・削除など)であれば、元の選択行を削除しない限り、「選択していた行がModelの変更前後でかわらないように自動的に選択位置が補正される」というのがJTable(あるいはJTableのListSelectionModel)の振舞いと思います。一方Model全体を設定しなおした場合、それ以前に選択していた行は無効になると思います。「以前に選択していた行」と「新たに設定されたモデルの中の同じインデックスのレコード」には何の関係もないと解釈するからだと思います。またその解釈は自分には自然に思えます。
|
2
2
|
|
3
|
-
もしModel全体を置き換え、かつユーザー操作なしに最初から特定の行を選択状態にしたいなら、アプリケーション固有の判断に従って「新たに設定したModelのどの行を選択状態にしたいのか」をJTableへ教えてやる必要があると思います。具体的にはModelを設定した直後にJTableのListSelectionModelオブジェクトに対してsetSelectionIntervalメソッドなどを用いればよいでしょう。
|
3
|
+
もしModel全体を置き換え、かつユーザー操作なしに最初から特定の行を選択状態にしたいなら、アプリケーション固有の判断に従って「新たに設定したModelのどの行を選択状態にしたいのか」をJTableへ教えてやる必要があると思います。具体的にはModelを設定した直後にJTableのListSelectionModelオブジェクトに対してsetSelectionIntervalメソッドなどを用いればよいでしょう。
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
訂正:上記回答は質問者さんの問題とはずれた内容だったようです。追加された情報に基づき改めてコメントします。
|
8
|
+
|
9
|
+
> javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648)
|
10
|
+
at パッケージ名.クラス名.mouseClicked(クラス名.java:496)
|
11
|
+
|
12
|
+
「行が選択された際の振る舞い」をMouseListener(MouseClicked)で行おうとしているように見えます。何に対してのMouseClickedなのか、そのハンドラーで「選択状態でないにもかかわらずなぜTableModel#getValueAtを呼び出そうとしているのか、コードがないので不明ですが、やはりそのあたりに問題があるように思えます。
|
13
|
+
|
14
|
+
ところで、選択状態の変化を捉える目的ならMouseClickedではなくListSelectionListenerを使うべきと思います。
|
1
誤記訂正
answer
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
Model全体を置き換えるのではなくModelの変更(追加・削除など)であれば、元の選択行を削除しない限り、「選択していた行がModelの変更前後でかわらないように自動的に選択位置が補正される」というのがJTable(あるいはJTableのListSelectionModel)
|
1
|
+
Model全体を置き換えるのではなくModelの変更(追加・削除など)であれば、元の選択行を削除しない限り、「選択していた行がModelの変更前後でかわらないように自動的に選択位置が補正される」というのがJTable(あるいはJTableのListSelectionModel)の振舞いと思います。一方Model全体を設定しなおした場合、それ以前に選択していた行は無効になると思います。「以前に選択していた行」と「新たに設定されたモデルの中の同じインデックスのレコード」には何の関係もないと解釈するからだと思います。またその解釈は自分には自然に思えます。
|
2
2
|
|
3
3
|
もしModel全体を置き換え、かつユーザー操作なしに最初から特定の行を選択状態にしたいなら、アプリケーション固有の判断に従って「新たに設定したModelのどの行を選択状態にしたいのか」をJTableへ教えてやる必要があると思います。具体的にはModelを設定した直後にJTableのListSelectionModelオブジェクトに対してsetSelectionIntervalメソッドなどを用いればよいでしょう。
|