Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JTableのセル変更イベントについて

よろしければご教授ください。
JTable を使って下記のテーブルを作成しました。

model = new DefaultTableModel(4,5);
table_note = new JTable(model);
scroll_note = new JScrollPane(table_note);

上記テーブルのセル内には、それぞれ何かしらの数値が入っております。

<やりたいこと>
セルの値を変更した場合にイベントを取得し、テーブルと連動しているデータベースに更新をかけたい。

<困っていること>
セル内の値が変更されて確定されたか、変更されずに確定されたかを自動判定できるメソッドはあるのでしょうか。




4

回答

85212

閲覧

4件の回答

評価

10

最近Swingからは遠ざかっているので
的を射た回答が出来るか微妙で申し訳ないですが…

getValueAt(行,列)でデータを取得して
前データを保持するようにして編集後の
データと比較して判定してみては?

(1)tableChangedを使用
(2)getValueAtを使用

※他にもTableCellRendererを使用する方法もある。

評価

0

DefaultCellEditorを継承したクラスを作成し、編集前と編集後の値を比較するという方法はいかが?

あああ氏の方法だとn x n分の値保持が必要だと思いますが(違ってたらごめんなさい)、この方法ならば編集しようとしている1セルの値保持でOKです。

具体的な実装方法は↓の「(自作)日付エディター」の項を参考に…。
http://www.ne.jp/asahi/hishidama/home/tech/java/swing/JTable.html

※この方法だと行追加・削除イベントは検知できないので、もし後から行追加・削除をすることがあり、そのタイミングでもDB更新をかけたいのならば、TableModelListener#tableChangedと併用で…。

評価

0

容 よろしければご教授ください。
JTable を使って下記のテーブルを作成しました。

model = new DefaultTableModel(4,5);
table_note = new JTable(model);
scroll_note = new JScrollPane(table_note);

上記テーブルのセル内には、それぞれ何かしらの数値が入っております。

<やりたいこと>
セルの値を変更した場合にイベントを取得し、テーブルと連動しているデータベースに更新をかけたい。

<困っていること>
セル内の値が変更されて確定されたか、変更されずに確定されたかを自動判定できるメソッドはあるのでしょうか。
 

評価

0

editingStoppedでいけると思います。

セルの編集終了のタイミング時に内容が変更された場合にのみ呼び出されます。

※JTableのメソッドなのでセルの編集終了時に
呼ばれるので個別に設定したい場合には
注意が必要。

[補足]
余計なお世話かもしれませんがGUIアプリは
どのイベントでどのシーケンスが動作するかなど
非常に設計が複雑になっているので余裕があれば
コンポーネントの階層の理解とクラスの依存関係などを
理解してみるとわかりやすいと思います。

正直、理解していないと意図しないバグが大量に埋め込まれる可能性が高い。

これはVCやVBと同じですね。
ぱっと見はひとつに見えても階層はとても深く
複雑に設計されていますので。 

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。