Heim >Java >javaLernprogramm >Warum wiederholt sich mein javax.swing-Timer, aber mein ActionListener aktualisiert die Farbe meines Textfelds 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!