Я пытаюсь продемонстрировать нескольким начинающим программистам, как установить метку в приложении JavaFX для автоматического обновления.По сути, они хотели бы, чтобы значение на этикетке уменьшалось каждую минуту или около того без какого-либо взаимодействия с пользователем.
Java не является моей сильной стороной, и просматривая некоторые предыдущие вопросы, которые я получаю, мне нужно разобраться с потоками и Runnable().
Ниже я собрал код, который работает, но мне было просто интересно, есть ли лучший способ сделать это или более простой способ продемонстрировать тот же результат с помощью более простого кода.
public class MainTimer2 extends Application {
private int count = 100;
private Label response = new Label(Integer.toString(count));
public static void main(String[] args) {
launch(args);
}
//Update function
private void decrementCount() {
count--;
response.setText(Integer.toString(count));
}
@Override
public void start(Stage myStage) {
myStage.setTitle("Update Demo");
//Vertical and horizontal gaps set to 10px
FlowPane rootNode = new FlowPane(10, 10);
rootNode.setAlignment(Pos.CENTER);
Scene myScene = new Scene(rootNode, 200, 100);
myStage.setScene(myScene);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Runnable updater = new Runnable() {
@Override
public void run() {
decrementCount();
}
};
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println("Timer error");
}
// UI update is run on the Application thread
Platform.runLater(updater);
}
}
});
// don't let thread prevent JVM shutdown
thread.setDaemon(true);
thread.start();
rootNode.getChildren().addAll(response);
myStage.show();
}
}