Я столкнулся с проблемами фокусировщика окон / окон в Linux (gnome).
Я провел некоторую трассировку и обнаружил:
1) когда вы щелкаете по окну, LOST FOCUS НЕ срабатывает (событие фокусировки не запускается).
2) восстановление фокуса / щелчок по окну приводит к тому, что оно вызывает событие LOST FOCUS, а не фокус усиления.
Исправление, которое сейчас мне подходит:
frame.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e){
System.out.println("Focus GAINED:"+e);
}
public void focusLost(FocusEvent e){
System.out.println("Focus LOST:"+e);
// FIX FOR GNOME/XWIN FOCUS BUG
e.getComponent().requestFocus();
}
});
В основном запрашивает фокус, когда фокус потерян. Похоже, что ничего не нарушает для пользователей Windows, значок может мигать на панели запуска, когда вы теряете фокус, в худшем случае.
Кроме того, если вы хотите выполнить отладку, как я, вот этот код:
Toolkit.getDefaultToolkit().addAWTEventListener( new AWTEventListener(){
public void eventDispatched(AWTEvent e) {
System.out.println("AWT:"+e);
System.out.flush();
}
}, FocusEvent.FOCUS_EVENT_MASK | WindowEvent.WINDOW_FOCUS_EVENT_MASK | WindowEvent.WINDOW_EVENT_MASK);
Надеюсь, это кому-нибудь поможет!