Maison  >  Article  >  Java  >  Pourquoi mon ActionListener Swing Timer ne met-il pas à jour la couleur d'arrière-plan du champ de texte ?

Pourquoi mon ActionListener Swing Timer ne met-il pas à jour la couleur d'arrière-plan du champ de texte ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 00:21:01870parcourir

Why Doesn't My Swing Timer ActionListener Update the Text Field's Background Color?

La minuterie Javax.swing se répète, mais ActionListener ne s'exécute pas

Introduction

Dans un Lors d'une tentative de création d'une couleur d'arrière-plan clignotante pour un champ de texte, un utilisateur a rencontré un problème particulier où la fonction de minuterie fonctionnait comme prévu, mais ActionListener ne déclenchait pas le changement de couleur. Cette différence laisse la couleur d'arrière-plan inchangée après le basculement initial.

Configuration de la minuterie

La configuration de la minuterie dans ce scénario est conforme aux directives standard de l'industrie pour la configuration d'une balançoire. minuterie avec un délai raisonnable, une activation de la répétition et un ActionListener. Le minuteur lance la classe Flash, qui implémente l'interface ActionListener, pour gérer les changements de couleur.

Implémentation d'ActionListener

L'ActionListener, défini dans une classe statique imbriquée, contient la logique de basculement de la couleur d'arrière-plan basée sur un clignotant de variable booléenne interne. Bien que le débogage ait confirmé que l'action est en cours d'exécution, le changement de couleur n'est pas reflété sur l'écran après la bascule initiale.

Cause fondamentale et solution

Le nœud du problème Le problème réside dans le fait que les composants Swing, y compris les champs de texte, nécessitent un appel explicite à la méthode repaint() pour mettre à jour leur apparence. Sans cet appel, toute modification apportée via setBackground() ou d'autres méthodes affectant l'apparence ne sera pas visible par l'utilisateur.

Implémentation révisée

Pour corriger le problème, l'ActionListener doit inclure un appel à repaint() après avoir modifié la couleur d'arrière-plan. Voici une version révisée d'ActionListener :

<code class="java">static class Flash implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
        if (flasher) {
            SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
        } else {
            SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
        }
        **SpreademPanel.historyPnl.NameTxt.repaint();** // Trigger repaint
        flasher = !flasher;
    } //actionPerformed
} //Flash</code>

En ajoutant l'appel repaint(), le champ de texte mettra désormais correctement à jour son apparence en fonction de la logique d'ActionListener.

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!

Déclaration:
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