В javafx как я могу изменить цвет кнопки, подождите 1 секунду, чем изменить его обратно сделать по умолчанию? - PullRequest
0 голосов
/ 14 января 2020

Итак, я хочу изменить цвет кнопки на светло-зеленый, подождите 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 () не будет ждать, пока кнопка возвращается к значению по умолчанию и начинает новую итерацию.

1 Ответ

3 голосов
/ 14 января 2020
  1. Используйте -fx-base вместо -fx-background-color.
  2. Использование PauseTransition.
  3. Никогда не используйте Thread.sleep() в потоке пользовательского интерфейса.

Пример кода:

button.setStyle("-fx-base: lightgreen");
PauseTransition pause = new PauseTransition(
    Duration.seconds(1),
);
pause.setOnFinished(event -> {
    button.setStyle(null);
});
pause.play();    
...