Wie aktiviert man den timer in dem ActionListener?
ich habe bei java einen swing timer erstellt und will jetzt mit hilfe dieses timers buttons blinken lassen. Wie genau muss ich das jetz reinfügen ? (ich hab schon mehrere sachen ausprobiert und nachgeschaut ich finde aber nichts passendes)
ich will das der button gelb wird und dann nach ein paar sekunden wieder grau also die ursprünglich farbe
1 Antwort
Der Timer ist sinnlos wenn er keinen ActionListener hat - "this" ist da eher keine gute Idee. Hier wäre ein Beispiel - das Blinken startet und stoppt durch Druck auf einen anderen Button.
final Timer blinkTimer = new Timer(1000,
(event) -> blinkButton.setBackground(blinkButton.getBackground() == Color.YELLOW ? Color.GREEN : Color.YELLOW));
button.addActionListener(e -> {
if (blinkTimer.isRunning()) {
blinkTimer.stop();
} else {
blinkTimer.start();
}
});
Allerdings eignen sich Buttons nicht sonderlich gut zum Blinken. Wenn da ein Widget vom System-GUI verwendet wird, sieht man die Hintergrundfarbe gar nicht. Allenfalls kann man mit .setOpaque(true) den Rahmen rundherum verändern lassen.
Wenn's nur einmal blinken soll, legst du den Timer halt entsprechend an.
Kann man auch so machen, aber dann musst du trotzdem die entsprechende Implementierung haben.
Wenn ich deinen Fall richtig verstehe willst du ohnehin nur einen Einmal-Timer, der nach einer bestimmte Zeit wieder die alte Hintergrundfarbe herstellt. Das ist noch einfacher als mein Beispiel:
final Color prevColor = blinkButton.getBackground();
blinkButton.setBackground(Color.YELLOW);
Timer t = new Timer(1000, (evt) -> blinkButton.setBackground(prevColor));
t.setRepeats(false);
t.start();
mein problem allerdings ist das ich das nicht so umsetzen kann ... :( ich krieg eine fehlermeldung das mein timer kein void oder int hat also wenn ich knopf1.setBackground(grau)); in meinem fall hinschreibe
ich hab den ActionListener so in der klasse mit implements ActionListener hinzugefügt funktioniert das auch so nicht ? also das ich beim timer "this" hinschreibe