La finestra sempre in primo piano non riceve eventi di focus
Domanda
Ho una jwindow (impostata per essere sempre in primo piano) su cui puoi fare clic per ottenere un menu a comparsa. Se l'utente fa clic con il pulsante destro del mouse sulla finestra, viene visualizzato il menu a comparsa, ma se l'utente fa clic su qualsiasi altro menu a comparsa della finestra (come Firefox) non scompare.
Ho provato a risolverlo aggiungendo FocusListener sulla jwindow, ho implementato FocusListener e l'override
public void focusGained(FocusEvent e) {
System.out.println("gain" );
}
public void focusLost(FocusEvent e) {
System.out.println("lost" );
}
ma l'evento non viene mai chiamato. ho anche provato quanto segue,
addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
System.out.println("gain 2" );
}
});
anche questo evento non è stato chiamato.
Tutto ciò che questa jwindows ha è una singola JLabel con una foto sopra.
Soluzione
Dalla memoria le JWindow non ricevono eventi focus / window.
Altri suggerimenti
Si suppone di chiamare setFocusableWindowState (true)
su un JWindow
per consentirne la focalizzazione. Ma questo "è ancora" non è abbastanza. Il JWindow
deve anche avere componenti focalizzabili e non sono ancora in grado di farlo funzionare.
L'uso di JFrame setUndecorated ()
sembra la scelta migliore.
Per essere focalizzabile, è necessario creare un JWindow
con un Frame
padre, come new JWindow (parentFrame)
. Fallo e penso che dovresti trovare che otterrà automaticamente lo stato attivo quando lo imposti su visibile.
Non sono proprio sicuro di cosa stai cercando di fare. Se stai cercando di nascondere manualmente il popup, probabilmente dovresti usare un WindowListener e gestire l'evento windowDeactivated.
Se vuoi davvero visualizzare un menu popup, dovresti usare JPopupMenu, non implementarlo da solo.