Heim >Java >javaLernprogramm >Warum wiederholt sich mein javax.swing-Timer, aber mein ActionListener aktualisiert die Farbe meines Textfelds nicht?

Warum wiederholt sich mein javax.swing-Timer, aber mein ActionListener aktualisiert die Farbe meines Textfelds nicht?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 11:21:29899Durchsuche

Why Does My javax.swing Timer Repeat but My ActionListener Doesn't Update the Color of My Text Field?

javax.swing-Timer wird erfolgreich wiederholt, aber ActionListener reagiert nicht

In diesem Codeausschnitt möchte der Autor die Hintergrundfarbe eines Textfelds durch Blinken ändern Wirkung. Das Timer-Setup scheint ordnungsgemäß zu funktionieren und wiederholt die in der Flash-Klasse beschriebenen Aktionen. Der gewünschte Farbwechsel wird jedoch nur beim ersten Wechsel beobachtet.

Bei näherer Betrachtung wird deutlich, dass das Problem nicht an der wiederholten Ausführung des Timers liegt, sondern an fehlenden visuellen Aktualisierungen trotz der beabsichtigten Farbwechsel. Um dieses Problem zu beheben, muss unbedingt sichergestellt werden, dass die an der Hintergrundfarbe des Textfelds vorgenommenen Änderungen in der Anzeige widergespiegelt werden.

Ein effektiver Ansatz besteht darin, die paintComponent-Methode in einer benutzerdefinierten Panel-Klasse zu überschreiben, die den Text kapselt Feld. Bei dieser Methode sollte der Text mit der aktualisierten Hintergrundfarbe gerendert werden. Dieser Mechanismus ermöglicht kontinuierliche Aktualisierungen, wenn der Timer Farbänderungen auslöst.

Hier ist ein modifiziertes Beispiel, das diesen Ansatz beinhaltet:

<code class="java">public class FlashingPanel extends JPanel {

    private javax.swing.Timer timer;
    private JTextField textField;
    private boolean flashing = false;

    public FlashingPanel() {
        textField = new JTextField(10);
        add(textField);

        timer = new javax.swing.Timer(1000, this);
        timer.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        if (flashing) {
            textField.setBackground(Color.white);
        } else {
            textField.setBackground(Color.pink);
        }

        flashing = !flashing;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();
    }

}</code>

In diesem erweiterten Code wird die paintComponent-Methode überschrieben, um sie direkt anzuwenden Die Hintergrundfarbe ändert sich im Textfeld und sorgt so für eine visuelle Aktualisierung in jedem Intervall. Dadurch blinkt die Hintergrundfarbe des Textfelds wie vorgesehen wiederholt und kontinuierlich.

Das obige ist der detaillierte Inhalt vonWarum wiederholt sich mein javax.swing-Timer, aber mein ActionListener aktualisiert die Farbe meines Textfelds nicht?. 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