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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 03:50:28955browse

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

Javax.swing timer repeats fine, but ActionListener doesn't do anything

In the provided code snippet, a timer is successfully configured to repeat at regular intervals. However, the ActionListener associated with the timer is not triggering any actions when the timer expires.

The ActionListener's actionPerformed method is responsible for taking action when the timer triggers. In this case, the method attempts to toggle the background color of a text field between white and pink. However, the text field's background color remains unchanged despite the timer's continuous execution.

The root of the issue lies in the use of a static inner class as the ActionListener. Static inner classes have a peculiar characteristic where they can only access static members of their enclosing class. In this case, the spreademPanel and historyPnl variables are not static, and thus inaccessible within the Flash class.

To resolve this, one can either make spreademPanel and historyPnl static, or create an instance of the Flash class and pass it as the ActionListener.

Here's an example with the instance-based approach:

<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>

The above is the detailed content of Why is my Java Swing Timer\'s ActionListener not triggering actions despite the timer repeating correctly?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn