Maison > Java > javaDidacticiel > Pourquoi mon TextField ne clignote-t-il qu'une seule fois ? (Problème de Swing Timer et ActionListener)

Pourquoi mon TextField ne clignote-t-il qu'une seule fois ? (Problème de Swing Timer et ActionListener)

DDD
Libérer: 2024-10-29 08:43:30
original
252 Les gens l'ont consulté

 Why Is My TextField Flashing Only Once? (Swing Timer and ActionListener Issue)

Gestion des problèmes : comportement du flash dans une minuterie Swing

Dans le code Java fourni, une minuterie est configurée avec un ActionListener pour mettre à jour l'arrière-plan couleur d'un champ de texte dans une séquence alternée. Bien que la minuterie déclenche l'ActionListener de manière appropriée, le changement de couleur n'est observé que lors de l'itération initiale.

Cause fondamentale

Votre erreur principale réside dans l'implémentation personnalisée de votre ActionListener . Plus précisément, les deux problèmes suivants entravent le bon fonctionnement :

  1. Affectation de la variable 'flasher' : Le code n'initialise pas la variable 'flasher', il fonctionne donc avec un value.
  2. Manque de mise à jour de l'interface graphique : Les composants Swing doivent être mis à jour dans le fil de répartition d'événement (EDT). Sans cela, les éléments de l'écran risquent de ne pas refléter les modifications souhaitées.

Résolution

Mettez en œuvre les modifications suivantes :

  1. Initialisation de 'flasher' : Inclure un flasher booléen privé = false ; en haut de la classe Flash pour initialiser la variable flasher.
  2. Mise à jour de l'interface graphique dans EDT : Dans la méthode actionPerformed, invoquez SwingUtilities.invokeLater() pour placer le changement de couleur dans l'EDT. Mettez à jour le code comme suit :
<code class="java">@Override
public void actionPerformed(ActionEvent evt)
{
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if (flasher)
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
            }
            else
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
            }
            flasher = !flasher;
        }
    });
} //actionPerformed</code>
Copier après la connexion

En appliquant ces modifications, le minuteur mettra désormais à jour efficacement la couleur d'arrière-plan du champ de texte de manière continue.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal