- ベストアンサー
JTableのイベント取得方法
- JTableのイベント取得方法とは?セルが編集されたときのイベントの取得方法について解説します。
- JTableのイベント取得方法についてアドバイスをお探しですか?この記事ではセルが編集されたときのイベントの取得方法について詳しく説明します。
- JTableのイベント取得方法についてお困りですか?この記事ではセルが編集されたときのイベントの取得方法について解説します。
- みんなの回答 (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などは覚えてしまうと 非常に便利なクラスです。是非頑張ってください。 また不明点がありましたら補足を下さい。
その他の回答 (1)
- ct27
- ベストアンサー率62% (48/77)
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 を参照して下さい。わかりにくい部分がれば補足を下さい。
補足
MyEditorListener をAbstractTableModelいaddListener するということでしょうか? いまいち MyEditorListenerをどのようにJTableに組み込んでいいのかわからず困っています。 editingStoppedメソッドに処理を書くことはわかるのですが… 再度、助言お願いします。
お礼
内部テーブルクラスを以下のように修正して イベントを取得することができました!! /** * 内部テーブルクラス */ 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() ) ); } } } ありがとうございました。 とても勉強になりました。