在javafx中,我如何更改按钮的颜色,等待1秒钟而不是更改按钮为默认值?

因此,我想将按钮的颜色更改为浅绿色,请等待1秒钟,然后再将其更改为默认值。 我怎样才能做到这一点?我是这样尝试的:

button1.setStyle("-fx-background-color: lightgreen");

try { Thread.sleep(1000); }

catch(InterruptedException e) {}

button1.setStyle("");

但是我有2个问题:

  1. 颜色从不设置为浅绿色,而仅设置为默认颜色。

  2. 如果我只想将其更改为浅绿色,它只会在等待1秒后更改,而不是在等待之前更改。

编辑:

因此,我不得不使用PauseTransition,但是它无法按照我想要的方式工作。

for(int i=0; i<n; i++) {
   int x = rand.nextInt(4) + 1;
            switch(x) {
                case 1: {
                    System.out.println("b1");
                    button1.setStyle("-fx-background-color: lightgreen; -fx-border-color: black;");

                    PauseTransition wait = newPauseTransition(Duration.seconds(1));
                    wait.setOnFinished(event -> {
                    button1.setStyle("");
                });
                wait.play();
            }
            break;
            case 2: {
                System.out.println("b2");
                button2.setStyle("-fx-background-color: lightgreen; -fx-border-color: black;");

                PauseTransition wait = new PauseTransition(Duration.seconds(1));
                wait.setOnFinished(event -> {
                    button2.setStyle("");
                });
                wait.play();
            }
            break;
            ...
}

现在的问题是while()不会等到按钮变回默认值,它才会开始新的迭代。

GFHJTYHTR 回答:在javafx中,我如何更改按钮的颜色,等待1秒钟而不是更改按钮为默认值?

  1. 使用-fx-base代替-fx-background-color
  2. 使用PauseTransition
  3. 切勿在UI线程上使用Thread.sleep()

示例代码:

button.setStyle("-fx-base: lightgreen");
PauseTransition pause = new PauseTransition(
    Duration.seconds(1),);
pause.setOnFinished(event -> {
    button.setStyle(null);
});
pause.play();    
本文链接:https://www.f2er.com/2772883.html

大家都在问