Maison > Java > javaDidacticiel > le corps du texte

Pourquoi mon curseur d'attente Java n'apparaît-il pas sur les curseurs personnalisés ?

Linda Hamilton
Libérer: 2024-11-24 19:31:13
original
829 Les gens l'ont consulté

Why Doesn't My Java Wait Cursor Appear Over Custom Cursors?

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 :

  1. Créer un écouteur d'action qui :

    • Planifie une tâche pour définir l'attente curseur après un délai spécifié.
    • Exécute l'écouteur d'action d'origine après le délai.
  2. Lorsque l'écouteur d'action est déclenché :

    • Placez le curseur d'attente sur la vitre du JFrame.
    • Ajoutez un adaptateur de souris sur la vitre pour empêcher les événements de la souris d'atteindre les composants sous-jacents.
    • Faire la vitre visible.
  3. Lorsque la tâche du minuteur est terminée :

    • Restaurez le curseur d'origine sur le JFrame.
    • Retirez l'adaptateur de souris de la vitre.
    • Masquer le vitre.

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)
}
Copier après la connexion

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