Maison > Java > javaDidacticiel > Pourquoi mon curseur d'attente Java ne s'affiche-t-il pas lors de l'utilisation d'un curseur personnalisé ?

Pourquoi mon curseur d'attente Java ne s'affiche-t-il pas lors de l'utilisation d'un curseur personnalisé ?

Barbara Streisand
Libérer: 2024-11-29 13:07:14
original
377 Les gens l'ont consulté

Why Doesn't My Java Wait Cursor Show When Using a Custom Cursor?

Problème d'affichage du curseur d'attente Java

Aperçu du problème

Dans une application Java, l'attente le curseur ne s'affiche pas correctement lorsque la souris survole un panneau avec un curseur personnalisé. Lorsque le panneau ne change pas le curseur, le curseur d'attente apparaît comme prévu.

Analyse

Le problème principal vient du fait que le curseur d'attente est placé sur le composant d’où provient l’événement de souris. Dans ce cas, lorsque la souris survole un panneau avec un curseur personnalisé, le curseur d'attente est placé sur ce panneau et est donc masqué par le curseur du panneau.

Solution de contournement recommandée

Pour contourner ce problème et garantir que le curseur d'attente s'affiche correctement, il est recommandé de placer le curseur d'attente sur la vitre du cadre contenant le composant qui déclenche l'état d'attente. La vitre est une couche transparente qui repose sur tous les autres composants du cadre.

Mise en œuvre

SSCE modifié :

Le SSCE modifié suivant montre comment implémenter le correctif en plaçant le curseur d'attente sur le glasspane :

public class BusyCursorTest extends javax.swing.JFrame {

    // ...

    private static void startWaitCursor(javax.swing.JFrame frame) {
        frame.getGlassPane().setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
        frame.getGlassPane().addMouseListener(mouseAdapter);
        frame.getGlassPane().setVisible(true);
    }

    private static void stopWaitCursor(javax.swing.JFrame frame) {
        frame.getGlassPane().setCursor(originalCursor);
        frame.getGlassPane().removeMouseListener(mouseAdapter);
        frame.getGlassPane().setVisible(false);
    }

    // ...

}
Copier après la connexion

Avantages de cette approche :

  • Cette approche garantit que le curseur d'attente est toujours visible en cas de besoin, quels que soient les paramètres du curseur de n'importe quel composant dans le cadre.
  • Il élimine le besoin de savoir quels panneaux peuvent être au premier plan ou si l'événement est déclenché par une souris cliquez.
  • Il fournit une solution centralisée pour modifier le comportement du curseur d'attente au niveau du conteneur de niveau supérieur.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal