2012-05-11 8 views
0

編集可能なJTextField、編集可能なJTextArea、および編集可能なJTextFieldという3列のJTableがあります。テーブル内のJTextFieldとJTextAreaに注目する

私の問題は二重です。最後の2つの列をバックグラウンドで強調表示し、編集する準備ができていることを確認したい場合は、そのカーソルをタブに移動すると表示されます。また、特定のフォントを使用します。したがって、カスタムレンダラとエディタが必要です。

私は1つのセルで2回クリックすると成功しますが、キーボードを使用してそこに到達した場合は成功しません。セルからセルにタブすることができます(JTextAreaのsetTraversalKeys呼び出しのおかげで)、入力を開始しますが、どこにフォーカスがないかはわかりません。

私は、トリガーするコンポーネントのいずれかに背景色を設定するフォーカスイベントリスナーを持っています。これは、セル編集に使用されるJTextFieldおよびJTextArea、およびセルレンダリングに使用されています。しかし、マウスをクリックするだけでトリガーされます。

私がタブインしているセルでフォーカスイベントが確実に発生するようにするにはどうすればよいですか?

ありがとうございました。

+2

問題を説明している[sscce](http://sscce.org/)を含むように質問を編集してください。 – trashgod

+0

@Ellyこれはおそらく1つのコード行についての質問かもしれませんが、[SSCCE](http://sscce.org/)で質問を編集してFocusとTableCellEditor – mKorbel

答えて

1

あなたが選択変更に耳を傾け、あなたがそれを必要とする編集開始する必要があります:あなたはそれを行うことができる方法単なる例

final JTable table = new JTable (
      new String[][]{ { "col1", "col2", "col3" }, { "col1", "col2", "col3" } }, 
      new String[]{ "1", "2", "3" }); 
    ListSelectionListener listener = new ListSelectionListener() 
    { 
     public void valueChanged (ListSelectionEvent e) 
     { 
      if (table.getSelectedRow() != -1 && table.getSelectedColumn() != -1) 
      { 
       table.editCellAt (table.getSelectedRow(), table.getSelectedColumn()); 
      } 
     } 
    }; 
    table.getColumnModel().getSelectionModel().addListSelectionListener (listener); 
    table.getSelectionModel().addListSelectionListener (listener); 

ザッツを。

0

ありがとうございました。これは私がなってしまったものです:

ListSelectionListener listener = new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      int row = table.getSelectedRow(); 
      int col = table.getSelectedColumn(); 

      // Only columns beyond the first are edited... 
      if (row != -1 && col > 0) { 
       table.editCellAt(row, col); 
       try { 
        Robot robot = new Robot(); 
        robot.keyPress(KeyEvent.VK_F2); 
        robot.keyRelease(KeyEvent.VK_F2); 
       } catch (AWTException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    }; 

editCell()の呼び出しに応じて作成されたセルの編集者は、彼らが使用JTextAreaにとのJTextFieldの背景色を設定します。ロボットの目的は、F2のうつ病をシミュレートして、カーソルを明らかにすることです(私が知っている間違った言葉ですが、正しいものが私を逃げさせます)。

ロボットは、前方にタブ移動するときに機能しますが、後方には移動しませんが、シェーディングが発生します。このコードスニペットがこの場合に実行されるかどうかはわかりませんが、セルエディタは何とか作成されます。このプログラムは自分のためだけのものなので、先日、その小さな問題を解決しようとします。

関連する問題