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!