Le minuteur Javax.swing se répète correctement, mais ActionListener ne fait rien
Dans l'extrait de code fourni, un minuteur est configuré avec succès pour répéter à intervalles réguliers. Cependant, l'ActionListener associé au minuteur ne déclenche aucune action lorsque le minuteur expire.
La méthode actionPerformed d'ActionListener est chargée d'agir lorsque le minuteur se déclenche. Dans ce cas, la méthode tente de faire basculer la couleur d'arrière-plan d'un champ de texte entre le blanc et le rose. Cependant, la couleur d'arrière-plan du champ de texte reste inchangée malgré l'exécution continue du minuteur.
La racine du problème réside dans l'utilisation d'une classe interne statique comme ActionListener. Les classes internes statiques ont une caractéristique particulière selon laquelle elles ne peuvent accéder qu'aux membres statiques de leur classe englobante. Dans ce cas, les variables spreademPanel et historyPnl ne sont pas statiques, et donc inaccessibles au sein de la classe Flash.
Pour résoudre ce problème, on peut soit rendre spreademPanel et historyPnl statiques, soit créer une instance de la classe Flash et passer en tant qu'ActionListener.
Voici un exemple avec l'approche basée sur les instances :
<code class="java">// Instance-based ActionListener class Flash implements ActionListener { private JComponent textfield; public Flash(JComponent textfield) { this.textfield = textfield; } @Override public void actionPerformed(ActionEvent evt) { if (this.flasher) { textfield.setBackground(Color.white); } else { textfield.setBackground(Color.pink); } this.flasher = !this.flasher; } //actionPerformed } // Main class ... // Setup timer Flash flash = new Flash(SpreademPanel.historyPnl.NameTxt); // Pass the text field to the Flash instance tmr = new javax.swing.Timer(1000, flash); ...</code>
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!