Question

Je souhaite être averti des événements de souris (en particulier des événements entrés et sortis de la souris) sur mon JFrame. Mais quand j'ajoute un écouteur de souris, j'obtiens les événements sur les bordures du cadre et non le cadre entier avec son contenu.

Avez-vous des idées sur les raisons?

EDIT: Ou au moins avez-vous une alternative? Je veux un " gloabal " moyen d’attraper des événements de souris sur le JFrame. Peut-être qu'un écouteur de souris n'est pas la solution.

Était-ce utile?

La solution

Vous pouvez obtenir tous les événements et vérifier si leur source est un composant du JFrame.

Voir Toolkit.addAWTEventListener

Autres conseils

Il existe un composant invisible qui recouvre l’ensemble de l’interface graphique, le "panneau de verre". Vous pouvez y attacher vos auditeurs. Exemple:

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

Si vous souhaitez que vos événements interceptés soient transmis aux composants sous-jacents, vous pouvez les redistribuer. Par exemple:

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

Parce que le contenu (probablement un JPanel) est "occultant" et consommer les événements et ils ne parviennent pas à JFrame.

Ce que vous pouvez faire est d’ajouter le même écouteur à tous les enfants. Il devrait y avoir un meilleur moyen cependant.

Une alternative à AWTEventListener consiste à envoyer un EventQueue . Cela présente l'avantage que les applets et l'application WebStart peuvent le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top