Maison >Java >javaDidacticiel >Pourquoi ma minuterie javax.swing se répète-t-elle mais mon ActionListener ne met pas à jour la couleur de mon champ de texte ?
Dans cet extrait de code, l'auteur vise à alterner la couleur d'arrière-plan d'un champ de texte à l'aide d'un clignotant effet. La configuration de la minuterie semble fonctionner correctement, répétant les actions décrites dans la classe Flash. Cependant, le changement de couleur souhaité n'est observé que lors de l'alternance initiale.
Après une inspection plus approfondie, il devient évident que le problème ne réside pas dans l'exécution répétée de la minuterie mais dans le manque de mises à jour visuelles malgré les changements de couleur prévus. Pour résoudre ce problème, il est crucial de s'assurer que les modifications apportées à la couleur d'arrière-plan du champ de texte sont reflétées dans l'affichage.
Une approche efficace consiste à remplacer la méthode paintComponent dans une classe de panneau personnalisée qui encapsule le texte. champ. Dans cette méthode, le texte doit être rendu avec la couleur d'arrière-plan mise à jour. Ce mécanisme permet des mises à jour continues lorsque la minuterie déclenche des changements de couleur.
Voici un exemple modifié qui intègre cette approche :
<code class="java">public class FlashingPanel extends JPanel { private javax.swing.Timer timer; private JTextField textField; private boolean flashing = false; public FlashingPanel() { textField = new JTextField(10); add(textField); timer = new javax.swing.Timer(1000, this); timer.start(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (flashing) { textField.setBackground(Color.white); } else { textField.setBackground(Color.pink); } flashing = !flashing; } @Override public void actionPerformed(ActionEvent e) { repaint(); } }</code>
Dans ce code amélioré, la méthode paintComponent est remplacée pour appliquer directement la couleur d'arrière-plan change pour le champ de texte, assurant une mise à jour visuelle à chaque intervalle. En conséquence, la couleur d'arrière-plan du champ de texte clignotera de manière répétée et continue comme prévu.
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!