java - 如何进行循环延迟?(JavaFX)
问题描述
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
while(true) {
s += 10;
if((s>height/1.2) || (s == height/1.2)) {
s = 0;
}
label.setLayoutX(s);
}}});
如何在不停止主 GUI 线程的情况下停止循环?(Thread.sleep(1000) 不起作用)
解决方案
你可以使用JavaFX
Timeline
. 从这里更改代码。
下面的应用程序演示了一种使用方式Timeline
。
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author Sedrick
*/
public class JavaFXApplication25 extends Application {
Integer s = 0;
@Override
public void start(Stage primaryStage) {
Label label = new Label(s.toString());
//This Timeline is set to run every second. It will increase s by 10 and set s value to the label.
Timeline oneSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), (ActionEvent event1) -> {
s += 10;
label.setText(s.toString());
}));
oneSecondsWonder.setCycleCount(Timeline.INDEFINITE);//Set to run Timeline forever or as long as the app is running.
//Button used to pause and play the Timeline
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
switch(oneSecondsWonder.getStatus())
{
case RUNNING:
oneSecondsWonder.pause();
break;
case PAUSED:
oneSecondsWonder.play();
break;
case STOPPED:
oneSecondsWonder.play();
break;
}
});
VBox root = new VBox(btn, label);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
推荐阅读
- python - Django:在html页面中检索表数据
- python - 如何将数据从文件加载到代码并使用它
- windows - 没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme Core 3.1
- r - 滞后线性回归
- excel - 使用 FILTERXML 返回子字符串
- r - 通过 R 更新到 PostgreSQL 数据库时保留带有特殊字符(如连字符和空格)的文本值
- excel - VBA 复制和过去循环
- jquery - 如何在Angular中动态创建复选框列表选定值?
- github - 我不能设置多个 github oauth 回调 url?
- python - Ansible 不再有效