Maison  >  Article  >  Java  >  Pourquoi l'ActionListener de mon Java Swing Timer ne déclenche-t-il pas d'actions malgré la répétition correcte de la minuterie ?

Pourquoi l'ActionListener de mon Java Swing Timer ne déclenche-t-il pas d'actions malgré la répétition correcte de la minuterie ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 03:50:28875parcourir

Why is my Java Swing Timer's ActionListener not triggering actions despite the timer repeating correctly?

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!

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