プロが教えるわが家の防犯対策術!

現在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によると…)
  *実際はセルをクリックするたびに走ってしまう(不思議)
 }
 
このソースに追加して実現することはできるでしょうか?

よきアドバイスをよろしくお願いします。

A 回答 (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状態になります。

この回答への補足

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

ありがとうございました。申し少しがんばってみます。

補足日時:2001/09/18 10:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!