MouseListener no JFrame
-
05-07-2019 - |
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.
Solução
Você pode obter todos os eventos e verificar se a fonte deles é um componente no JFrame.
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.