2016-04-09 7 views
0

JTableのセルについて書き込むとき、このセルは編集状態にありません。つまり、青い背景色で表示されているときです。セルが編集モードに入り、エディタコンポーネント(TextField)の現在のテキストの最後に表示されたテキストが表示されます。DefaultCellEditorコンポーネントのキーイベントのキャプチャ

しかし、この状態では、DefaultCellEditorTextFieldにはまだフォーカスがありません。キーイベントはテキストフィールドに属しません。

これらのキーイベントの受信者はどのコンポーネントですか? このキーイベントをキャプチャするにはどうすればよいですか?

+1

は、なぜあなたは、キーイベントを取得しようとしていますか? – camickr

答えて

0

EditorComponentがフォーカスを取得する前にイベントを受け取るコンポーネントは、JTable自体です。

JTableは、processKeyBindingメソッドによるキーバインドを介して、選択したセルのエディターコンポーネントにキーイベントを渡します。 このため、キーイベントリスナーには通知されません。

私のカスタムエディタは、JPanel(コンポジットエディタ)であるためprocessKeyBindingが存在しませんでした。その後、キーイベントは失われました。

解決策は、この機能を実行するためにpuclic関数を使用してカスタムTextFieldを使用してprocessKeyBindingアクションを渡します。

public class KeyBindingTextField extends JTextField { 
    protected boolean processKeyBindingPublic(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { 
     return super.processKeyBinding(ks, e, condition, pressed); 
    } 
} 

はその後、私はJPanelのからのTextFieldにキーバインドメソッドを渡します。

protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { 
    return TextField.processKeyBindingPublic(ks, e, condition, pressed); 
    } 
関連する問題