Maison  >  Article  >  Java  >  Comment gérer les MouseMotionEvents dans un JScrollPane imbriqué dans Java Swing ?

Comment gérer les MouseMotionEvents dans un JScrollPane imbriqué dans Java Swing ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 12:36:02437parcourir

How to Handle MouseMotionEvents in a Nested JScrollPane in Java Swing?

MouseMotionListener dans Java Swing : gestion des événements lorsque les composants sont imbriqués

Dans Java Swing, l'interface MouseMotionListener permet aux programmeurs de répondre aux événements de mouvement de la souris . Cependant, lorsque plusieurs composants sont imbriqués les uns dans les autres, la propagation des événements peut devenir complexe. Cet article traite d'un scénario spécifique dans lequel les MouseMotionEvents d'un JScrollPane personnalisé sont bloqués par ses composants imbriqués.

Problème : blocage d'événements dans les composants imbriqués

Le problème survient lors de l'ajout de composants au JScrollPane, entraînant le blocage des événements MouseMoved et MouseDragged. Cela empêche la fonctionnalité prévue de panoramique de la vue de JScrollPane.

Approche ad hoc : utilisation des actions de défilement de JScrollPane

La solution consiste à exploiter les actions existantes dans JScrollPane qui sont généralement utilisées dans les raccourcis clavier. Cette approche permet de déclencher le défilement par le mouvement de la souris lui-même.

Implémentation :

  1. Définir une classe de minuterie (ScrollTimer) qui implémente ActionListener et gère les actions de défilement .
  2. Ajoutez un MouseAdapter au JViewport du JScrollPane pour détecter le mouvement de la souris.
  3. Lorsque le curseur de la souris se trouve à proximité spécifiée des bords de la fenêtre, le minuteur de défilement correspondant est démarré.
  4. Le minuteur déclenche périodiquement l'action de défilement appropriée (par exemple, scrollLeft, scrollRight) à l'aide de la carte d'action du JScrollPane.
  5. Le minuteur s'arrête après un nombre prédéfini d'invocations ou lorsque le curseur de la souris s'éloigne du bord.

Exemple de code :

L'extrait de code suivant illustre la mise en œuvre :

<code class="java">// ScrollTimer class...
// ScrollPane class...
// ...

public static void main(String[] args) {
    EventQueue.invokeLater(() -> new ScrollAction().display());
}</code>

Avantages :

  • Fournit un moyen pratique et flexible de gérer les événements de mouvement de la souris, même lorsque les composants sont imbriqués.
  • Élimine le besoin de propagation manuelle des événements.

Remarque : Cette approche est personnalisable en ajustant la valeur N pour le nombre d'appels de minuterie et le DELAY pour l'intervalle de minuterie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn