3

一種のスプレッドシート プログラムで検索と置換機能を作成しています。私が望むのは、文字列を検索すると、プログラムが見つかった要素を含むテーブルを表示することです。

これまでのところは問題ありませんが、要素にカーソルを置いてフォーカスを取得することができないため、すぐに入力を開始できます。

私はカスタマイズされたものJTableとカスタマイズされたものを使用していTableCellEditorます。次のトリックは機能しないようです: (カスタマイズされた 内TableCellEditor):

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
        my_textfield.requestFocus(); 
    } 
}); 

また:

my_jtable.editCellAt(0, 3);
my_jtable.requestFocus();

また

my_jtable.getEditorComponent().requestFocusInWindow();

何か不足していますか?イベントがどのように発生するかを示す適切な説明 (適切なフロー図) はありますか? または、同様のことを行う可能性のあるサンプルコードはありますか?

4

3 に答える 3

2

いくつかのグーグルで、私はフォーラムスレッドを見つけました:プログラムでJTableのセルの編集を開始し、次のアイデアで答えました:

(JTable のサブクラス)

editCellAt(row,column);

requestFocus();
DefaultCellEditor ed = (DefaultCellEditor)
getCellEditor(row,column);

ed.shouldSelectCell(new ListSelectionEvent(this,row,row,true));

それはうまくいくでしょうか?

于 2008-12-20T07:46:57.070 に答える
0

以下のように、カスタム テーブル インスタンスで選択が有効になっているかどうかを確認します。

table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);

これを設定すると、通常は を呼び出すとtable.editCellAt(row, col);編集が開始されます。例 :

JTable myTable = new JTable(rows, cols);
myTable.setColumnSelectionAllowed(true);
myTable.setRowSelectionAllowed(true);

そして他の場所..編集が必要な場所、

boolean wasEditStarted = table.editCellAt(row, col);
if (wasEditStarted) {
  table.changeSelection(row, col, false, false);
}
于 2015-05-04T11:31:26.563 に答える
0

requestfocus なしで editcellat を試しましたか?

また、trueを返すようにオーバーライド/実装することを確認してください

    /**
     * Returns true.
     * @param anEvent  an event object
     * @return true
     */
    public boolean shouldSelectCell(EventObject anEvent) { 
    return true; 
    }
于 2008-12-19T10:11:23.633 に答える