• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JTableのイベント取得方法)

JTableのイベント取得方法

このQ&Aのポイント
  • JTableのイベント取得方法とは?セルが編集されたときのイベントの取得方法について解説します。
  • JTableのイベント取得方法についてアドバイスをお探しですか?この記事ではセルが編集されたときのイベントの取得方法について詳しく説明します。
  • JTableのイベント取得方法についてお困りですか?この記事ではセルが編集されたときのイベントの取得方法について解説します。

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

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.2

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() ) ); } } } ありがとうございました。 とても勉強になりました。

その他の回答 (1)

  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

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 を参照して下さい。わかりにくい部分がれば補足を下さい。

参考URL:
http://java-house.etl.go.jp/ml/
noname#1752
質問者

補足

MyEditorListener をAbstractTableModelいaddListener するということでしょうか? いまいち MyEditorListenerをどのようにJTableに組み込んでいいのかわからず困っています。 editingStoppedメソッドに処理を書くことはわかるのですが… 再度、助言お願いします。

関連するQ&A

専門家に質問してみよう