JTabbedPane и фокус в ней

Сегодня нашел новый (для меня, разумеется) баг в Swing. Проблема заключается в том, что если на панели есть JTabbedPane, а в ней лежит компонент, который должен получить фокус после того, как происходит переключение на соответствующий таб, то фокус этот он не получит.

Вот неработающий код:


tabPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
txtName.requestFocusInWindow();
}
});

Баг #5089436 (а ему уже около 5 лет) предлагает воркэраунд, связанный с обрамлением вызова requestFocusInWindow() в  invokeLater():

tabPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
EventQueue.invokeLater(new Runnable() {
public void run() {
txtName.requestFocusInWindow();
});
}
});

А в остальном Свинг по-прежнему хорош.

0 коммент. | добавить комментарий :: JTabbedPane и фокус в ней

Отправить комментарий