Pregunta

Tengo una ventana j (configurada para estar siempre en la parte superior) en la que puede hacer clic para obtener un menú emergente. Si el usuario hace clic con el botón derecho en la ventana, muestra el menú emergente, pero si el usuario hace clic en cualquier otra ventana (como Firefox), el menú emergente no desaparece.

Traté de solucionarlo agregando FocusListener en la ventana j, implementé FocusListener y anulé


    public void focusGained(FocusEvent e) {
    System.out.println("gain" );
    }

    public void focusLost(FocusEvent e) {
    System.out.println("lost" );
    }

pero su evento nunca se llama. También probé lo siguiente,


    addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            System.out.println("gain 2" );
        }
        });

este evento tampoco se llama.

Todo lo que tiene jwindows es un solo JLabel con una imagen.

¿Fue útil?

Solución

De la memoria JWindow no recibe eventos de foco / ventana.

Otros consejos

Se supone que debe llamar a setFocusableWindowState (true) en un JWindow para permitir que se pueda enfocar. Pero eso "todavía" no es suficiente. El JWindow también debe tener componentes enfocables y todavía no puedo hacer que funcione. Usar JFrame setUndecorated () parece ser la mejor opción.

Para que se pueda enfocar, se debe crear una JWindow con un Frame principal, como new JWindow (parentFrame) . Hazlo y creo que deberías encontrar que obtendrá automáticamente el foco cuando lo configures como visible.

No estoy realmente seguro de lo que está tratando de hacer. Si está tratando de ocultar la ventana emergente manualmente, entonces probablemente debería usar un WindowListener y manejar el evento windowDeactivated.

Si realmente desea mostrar un menú emergente, debe usar JPopupMenu, no implementarlo usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top