Wie aktiviert man den timer in dem ActionListener?

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.

KeinPlan404 
Fragesteller
 07.01.2021, 16:59

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

0
alfredo153  07.01.2021, 17:00
@KeinPlan404

Kann man auch so machen, aber dann musst du trotzdem die entsprechende Implementierung haben.

0
alfredo153  07.01.2021, 17:16
@KeinPlan404

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();
0
KeinPlan404 
Fragesteller
 07.01.2021, 20:53
@KeinPlan404

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

0