Maison > Java > javaDidacticiel > le corps du texte

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
Libérer: 2024-11-01 03:50:28
original
959 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal