• 締切済み

JTableにおけるTABイベント取得について

現在JTableを勉強しているのですが、 JTalbeでセルにフォーカスがある場合普通「TABキー」を押したときはフォーカスは右に移動すると思います。(右端にに到達したときは一段下がって左端といったように) そのイベント(タブ移動)使ってTABでフォーカスが移ったCellを編集できるようにEditモードにしたいと考えています。現在JTABEを以下のように実装しています -------ソース------- resultTable = new ETable(vecResult,clmName); ListSelectionModel cellSelectionModel = resultTable.getSelectionModel(); cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); cellSelectionModel.addListSelectionListener(this); * 内部テーブルクラス class ETable extends JTable{ public ETable( Vector rowList, Vector clmnList ){ super(rowList,clmnList); 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() ) ); } } } public void valueChanged(ListSelectionEvent e) {   //Cellの値が変わったときのイベント(APIによると…)   *実際はセルをクリックするたびに走ってしまう(不思議)  }   このソースに追加して実現することはできるでしょうか? よきアドバイスをよろしくお願いします。

みんなの回答

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

こんな感じで実装してみましたがどうでしょう? /** * 内部テーブルクラス */ class MyTable extends JTable{ public MyTable(){ super(); } public MyTable( TableModel ml ){ super( ml ); } /*行が変わったときに呼ばれる*/ public void valueChanged( ListSelectionEvent e ){ int nRow = this.getSelectedRow(); int nCol = this.getSelectedColumn(); if ( (nRow != -1) && (nCol != -1) ){ this.editCellAt( nRow, nCol ); } super.valueChanged( e ); } /*列が変わったとき*/ public void columnSelectionChanged( ListSelectionEvent e ){ int nRow = this.getSelectedRow(); int nCol = this.getSelectedColumn(); if ( (nRow != -1) && (nCol != -1) ){ this.editCellAt( nRow, nCol ); } super.columnSelectionChanged( e ); } } ちなみにコメントにも記述しましたが、valueChangedは行が変わったときに 走り、columnSelectionChangedは列が変わったときに走るので両方書いて おくと矢印キーを押して上下に移動したときにもedit状態になります。

noname#1752
質問者

補足

列が変わったときや行が変わったときのイベントは拾得るのですがやはり、Tabややじるしキーでフォーカスがセル単位で変わった時にフォーカスのあるセルをエディットモード(セルがへこんでそこにカーソルが存在する状態)にすることができないです。 ありがとうございました。申し少しがんばってみます。

関連するQ&A