2016-04-09 4 views
0

Когда он пишет о ячейке JTable, без этой ячейки в состоянии редактирования. Т.е., когда он отображается с голубым цветом фона. Ячейка войдет в режим издания, а текст, набранный, будет показан в конце текущего текста компонента редактора (a TextField).Захват ключевых событий компонента DefaultCellEditor

Однако в этом состоянии TextField of DefaultCellEditor еще не имеет фокуса. И ключевые события не принадлежат к текстовому полю.

Какой компонент является приемником этих ключевых событий? Как я могу захватить ключевые события?

+1

Почему вы пытаетесь захватить ключевые события? – camickr

ответ

0

Компонент, который принимает события перед этим компонентом EditorComponent, фокусируется на самом JTable.

JTable передает ключевые события компоненту редактора выбранной ячейки посредством связывания ключей с помощью метода processKeyBinding. По этой причине ни одно из ключевых событий-слушателей не оповещается

Моя проблема заключалась в том, что у моего пользовательского редактора не был processKeyBinding, потому что это был JPanel (составленный редактор). Затем события Key были потеряны.

Решение передаёт действие processKeyBinding с использованием специального текстового поля с функцией puclic для выполнения этой функции.

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

Затем я передать ключ связывания метод TextField от JPanel так:

protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { 
    return TextField.processKeyBindingPublic(ks, e, condition, pressed); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^