Heim >Java >javaLernprogramm >Warum blinkt mein TextField nur einmal? (Swing-Timer- und ActionListener-Problem)

Warum blinkt mein TextField nur einmal? (Swing-Timer- und ActionListener-Problem)

DDD
DDDOriginal
2024-10-29 08:43:30227Durchsuche

 Why Is My TextField Flashing Only Once? (Swing Timer and ActionListener Issue)

Problembehandlung: Flash-Verhalten in einem Swing-Timer

Im bereitgestellten Java-Code ist ein Timer mit einem ActionListener konfiguriert, um den Hintergrund zu aktualisieren Farbe eines Textfeldes in abwechselnder Reihenfolge. Während der Timer den ActionListener entsprechend auslöst, wird die Farbänderung nur in der ersten Iteration beobachtet.

Ursache

Ihr Hauptfehler liegt in der benutzerdefinierten Implementierung Ihres ActionListeners . Insbesondere die folgenden zwei Probleme behindern die ordnungsgemäße Funktionalität:

  1. Zuweisung der Variable „Flasher“: Der Code initialisiert die Variable „Flasher“ nicht, daher arbeitet er mit einer nicht initialisierten Variable Wert.
  2. Fehlendes GUI-Update: Swing-Komponenten müssen innerhalb des Event Dispatch Thread (EDT) aktualisiert werden. Ohne dies spiegeln Bildschirmelemente möglicherweise nicht die gewünschten Änderungen wider.

Auflösung

Führen Sie die folgenden Änderungen durch:

  1. Initialisierung von „Flasher“: Include private boolean flasher = false; oben in der Flash-Klasse, um die Flasher-Variable zu initialisieren.
  2. GUI im EDT aktualisieren: Rufen Sie innerhalb der actionPerformed-Methode SwingUtilities.invokeLater() auf, um die Farbänderung im EDT zu platzieren. Aktualisieren Sie den Code wie folgt:
<code class="java">@Override
public void actionPerformed(ActionEvent evt)
{
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if (flasher)
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
            }
            else
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
            }
            flasher = !flasher;
        }
    });
} //actionPerformed</code>

Durch die Anwendung dieser Änderungen aktualisiert der Timer nun effektiv die Hintergrundfarbe des Textfelds kontinuierlich.

Das obige ist der detaillierte Inhalt vonWarum blinkt mein TextField nur einmal? (Swing-Timer- und ActionListener-Problem). 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