Problème avec l'affichage du curseur d'attente Java
Problème :
Lors de l'affichage d'un curseur d'attente dans une application Java, le curseur n'apparaît pas si la souris est sur un panneau qui définit son propre curseur. Ce problème est démontré dans l'exemple d'exécutable autonome (SSCE) fourni.
Cause :
L'implémentation par défaut du curseur d'attente de Java n'affecte que le curseur directement défini sur le composant. Les panneaux avec des curseurs personnalisés sont prioritaires, remplaçant le curseur d'attente.
Solution :
Pour remédier à cela, le curseur d'attente doit être placé sur la vitre du JFrame qui contient le composant cherchant à afficher
Mise en œuvre :
Créer un écouteur d'action qui :
Lorsque l'écouteur d'action est déclenché :
Lorsque la tâche du minuteur est terminée :
SSCE modifié :
Le SSCE modifié intègre ces modifications pour garantir que le curseur d'attente est affiché même lorsque les panneaux ont des paramètres personnalisés. curseurs :
public class BusyCursorTest extends javax.swing.JFrame { private javax.swing.JPanel cursorPanel = null; // ... (remaining code) public static void main(String[] args) { new BusyCursorTest(); } public static java.awt.event.ActionListener getActionListener(final javax.swing.JFrame frame, final java.awt.event.ActionListener originalActionListener) { java.awt.event.ActionListener actionListener = new java.awt.event.ActionListener() { public void actionPerformed(final java.awt.event.ActionEvent e) { java.util.TimerTask timerTask = new java.util.TimerTask() { public void run() { originalCursor = frame.getCursor(); startWaitCursor(frame); } }; java.util.Timer timer = new java.util.Timer(); try { timer.schedule(timerTask, DELAY_MS); originalActionListener.actionPerformed(e); } finally { timer.cancel(); stopWaitCursor(frame); } } }; return actionListener; } 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); } // ... (remaining code) }
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!