Heim  >  Artikel  >  Java  >  Warum löst der ActionListener meines Java Swing Timers keine Aktionen aus, obwohl der Timer korrekt wiederholt wird?

Warum löst der ActionListener meines Java Swing Timers keine Aktionen aus, obwohl der Timer korrekt wiederholt wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 03:50:28875Durchsuche

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

Javax.swing-Timer wiederholt sich einwandfrei, aber ActionListener führt nichts aus

Im bereitgestellten Codeausschnitt ist ein Timer erfolgreich konfiguriert in regelmäßigen Abständen wiederholen. Der mit dem Timer verbundene ActionListener löst jedoch keine Aktionen aus, wenn der Timer abläuft.

Die actionPerformed-Methode des ActionListeners ist dafür verantwortlich, Maßnahmen zu ergreifen, wenn der Timer auslöst. In diesem Fall versucht die Methode, die Hintergrundfarbe eines Textfelds zwischen Weiß und Rosa umzuschalten. Die Hintergrundfarbe des Textfelds bleibt jedoch trotz der kontinuierlichen Ausführung des Timers unverändert.

Die Ursache des Problems liegt in der Verwendung einer statischen inneren Klasse als ActionListener. Statische innere Klassen haben die besondere Eigenschaft, dass sie nur auf statische Mitglieder ihrer umschließenden Klasse zugreifen können. In diesem Fall sind die Variablen spreademPanel und HistoryPnl nicht statisch und daher innerhalb der Flash-Klasse nicht zugänglich.

Um dieses Problem zu beheben, kann man entweder SpreademPanel und HistoryPnl statisch machen oder eine Instanz der Flash-Klasse erstellen und übergeben es als ActionListener.

Hier ist ein Beispiel mit dem instanzbasierten Ansatz:

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

Das obige ist der detaillierte Inhalt vonWarum löst der ActionListener meines Java Swing Timers keine Aktionen aus, obwohl der Timer korrekt wiederholt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn