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!