OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

JTableのイベント取得方法

  • 困ってます
  • 質問No.130784
  • 閲覧数3116
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お世話になります

JTableにDBからの検索結果を表示させて、そのセルを編集したときに編集したセルに対してアップデート等の処理を行いたいのですが、セルが編集されたときのイベントを取得したいのですがうまくいきません。
具体的なソース等のアドバイスよろしくお願いします。

---ソース---
TableEditListener lisner = new TableEditListener()
tableModel = new AbstractTableModel(vecResult,clmName);
tableModel.addTableModelListener(lisner);
table = new JTable(tableModel);

内部クラス

class TableEditListener implements javax.swing.event.TableModelListener{

 public TableEditListener(){
}
public void tableChanged(TableModelEvent e){
System.out.println("セルの編集をしました。");
}
}

現在以上のようなソースになっています。

よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル9

ベストアンサー率 62% (48/77)

aotakatakaさんはJTable自身のイベントとCellEditorのイベントを混同して
しまっているのかもしれませんね。editingStoppedはCellEditorのイベントです。

/**
* 内部テーブルクラス
*/
class ETable extends JTable{
public ETable( TableModel tableModel ){
super( tableModel );

DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();
//0番目のカラムを取得する
TableColumn col0 = colModel.getColumn( 0 );
//0番目のカラムにMyCellEditorをセットする
col0.setCellEditor( new MyCellEditor( new JTextField() ) );

}
}

/**
* CellEditor
*/
class MyCellEditor extends DefaultCellEditor{
MyCellEditor( JTextField tf ){
super( tf );
setClickCountToStart( 1 );
//MyEditorListenerを追加
addCellEditorListener( new MyEditorListener() );
}
}

/**
* CellEditorListener
*/
class MyEditorListener implements CellEditorListener{
//セルの編集が終わった時
public void editingStopped( ChangeEvent e ){
}
public void editingCanceled( ChangeEvent e ){
}
}

>MyEditorListenerをどのようにJTableに組み込んでいいのかわからず困っています。

 MyEditorListenerをJTableに組み込むのではなく、MyEditorListener
 を追加したMyCellEditorをJTableに組み込むというのが正解です。

 CellEditorやここでは関係ありませんがCellRendererなどは覚えてしまうと
 非常に便利なクラスです。是非頑張ってください。
 また不明点がありましたら補足を下さい。
お礼コメント
noname#1752

内部テーブルクラスを以下のように修正して
イベントを取得することができました!!

/**
* 内部テーブルクラス
*/
class ETable extends JTable{
public ETable( TableModel tableModel ){
super( tableModel );

// DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();

DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();
//0番目のカラムを取得する
for (int i=0;i<tableModel.getColumnCount();i++){
TableColumn col0 = colModel.getColumn( i );
//0番目のカラムにMyCellEditorをセットする
col0.setCellEditor( new MyCellEditor( new JTextField() ) );
}
}
public ETable( Vector rowList, Vector clmnList ){
super(rowList,clmnList);
// DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();

DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();
//0番目のカラムを取得する
for (int i=0;i<clmnList.size();i++){
TableColumn col0 = colModel.getColumn( i );
//0番目のカラムにMyCellEditorをセットする
col0.setCellEditor( new MyCellEditor( new JTextField() ) );
}
}
}

ありがとうございました。
とても勉強になりました。
投稿日時 - 2001-09-11 17:15:34
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 62% (48/77)

TableCellEditorを使用せずに編集されたときのイベントをとるのは出来ない かもしれませんが、編集が始まった時(正しくはカラムをクリックした時)の イベントはとることができます。 /** * 内部テーブルクラス */ class MyTable extends JTable{ public MyTable( TableMod ...続きを読む
TableCellEditorを使用せずに編集されたときのイベントをとるのは出来ない
かもしれませんが、編集が始まった時(正しくはカラムをクリックした時)の
イベントはとることができます。

/**
* 内部テーブルクラス
*/
class MyTable extends JTable{
public MyTable( TableModel tableModel ){
super( tableModel );
}
//カラムをクリックしたときにこのメソッドが内部的に呼ばれるので処理をここに記述する
public void valueChanged( ListSelectionEvent e ){
super.valueChanged( e );
//System.out.println("valueChanged");
}
}

TableCellEditorを使用するならもっと細かくイベントをとることができます。
編集終了のタイミングをとる場合はCellEditorListenerをimplementsした
クラスを使用するとよいと思います。
/**
* CellEditor
*/
class MyCellEditor extends DefaultCellEditor{
MyCellEditor( JTextField tf ){
super( tf );
setClickCountToStart( 1 );
//リスナー追加
addCellEditorListener( new MyEditorListener() );
}
}

/**
* CellEditorListener
*/
class MyEditorListener implements CellEditorListener{
//セルの編集が終わった時
public void editingStopped( ChangeEvent e ){
//やりたいことをここに記述する
}
public void editingCanceled( ChangeEvent e ){
}
}

JTable周辺の詳細はSUNが提供しているJavadocをご覧いただくか参考URL
を参照して下さい。わかりにくい部分がれば補足を下さい。
補足コメント
noname#1752

MyEditorListener をAbstractTableModelいaddListener
するということでしょうか?

いまいち
MyEditorListenerをどのようにJTableに組み込んでいいのかわからず困っています。

editingStoppedメソッドに処理を書くことはわかるのですが…

再度、助言お願いします。
投稿日時 - 2001-09-10 10:30:00


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ