Pergunta

Quero ser notificado dos eventos do mouse (especificamente o mouse entrou e saiu de eventos) no meu JFrame. Mas quando adiciono um mouselistener, recebo os eventos nas fronteiras do quadro, não todo o quadro com seu conteúdo.

alguma ideia do por que?

EDIT: Ou pelo menos você tem uma alternativa? Eu quero uma maneira "gloabal" de capturar eventos do mouse no JFrame. Talvez um mouselistener não seja a resposta.

Foi útil?

Solução

Você pode obter todos os eventos e verificar se a fonte deles é um componente no JFrame.

Ver Toolkit.addawteventListener

Outras dicas

Há um componente invisível que se sobrepõe a toda a GUI, o "painel de vidro". Você pode anexar seus ouvintes a isso. Exemplo:

JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);

Se você deseja que seus eventos interceptados passem para os componentes subjacentes, você pode redispatá -los. Por exemplo:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}

Porque o conteúdo (provavelmente um JPanel) é "sombreando" e consumindo os eventos e eles não atingem o JFrame.

O que você pode fazer é adicionar o mesmo ouvinte a todas as crianças. Deve haver uma maneira melhor.

Uma alternativa a AWTEventListener é empurrar um EventQueue. Isso tem a vantagem de que o aplicativo Applets e Webstart podem fazer isso.

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