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); } // ... }
Avantages de cette approche :
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!