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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top