Pergunta

Eu tenho um JWindow (definido para estar sempre no topo) que você pode clicar para obter um menu pop. Se o direito de utilizador clica a janela que mostra o menu pop, mas, em seguida, se o usuário clica em qualquer outra janela (como o Firefox) no menu pop não desaparece.

Tentei corrigi-lo adicionando focusListener na JWindow, i implementado focusListener e override


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

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

mas há evento nunca obter chamado. Eu também tentei o seguinte,


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

Este evento também não é chamado.

Tudo isso jwindows tem um único JLabel com uma imagem sobre ele.

Foi útil?

Solução

A partir da memória JWindow não receber eventos de foco / janela.

Outras dicas

Você está supor para setFocusableWindowState(true) chamada em uma JWindow para permitir que ele seja focusable. Mas que "ainda" não é suficiente. O JWindow também deve ter focalizável Componentes e eu ainda não sou capaz de fazê-lo funcionar. Usando JFrame setUndecorated() parece ser a melhor escolha.

Para ser focusable, um JWindow precisa ser criado com um Frame pai, como new JWindow(parentFrame). Faça isso e eu acho que você deve encontrá-lo irá receber automaticamente o foco quando você configurá-lo para visível.

Não sei o que você está tentando fazer. Se você está tentando esconder o popup manualmente, então você provavelmente deve usar um WindowListener e manipular o evento windowDeactivated.

Se você realmente quer para exibir um menu pop-up, você deve estar usando JPopupMenu, não implementá-la a si mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top