对我如何做到这一点有什么建议吗?
这是我到目前为止编写的代码,但它似乎忽略了Thread.Sleep并且只使第三个代码变为蓝色。
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import static javafx.scene.paint.Color.*;
public class UpdatingSceneWithDelays extends Application {
@Override
public void start(Stage stage) throws Exception {
AnchorPane anchorPane = new AnchorPane();
Rectangle rectangle1 = new Rectangle(100, 100, 100, 100);
Rectangle rectangle2 = new Rectangle(100, 250, 100, 100);
Rectangle rectangle3 = new Rectangle(100, 400, 100, 100);
Button button1 = new Button("cancel");
Button button2 = new Button("update");
button2.setLayoutY(100);
button1.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
rectangle1.setFill(BLACK);
rectangle2.setFill(BLACK);
rectangle3.setFill(BLACK);
}
});
button2.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
rectangle1.setFill(RED);
rectangle2.setFill(BLACK);
rectangle3.setFill(BLACK);
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
rectangle1.setFill(BLACK);
rectangle2.setFill(GREEN);
rectangle3.setFill(BLACK);
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
rectangle1.setFill(BLACK);
rectangle2.setFill(BLACK);
rectangle3.setFill(BLUE);
}
});
anchorPane.getChildren().add(rectangle1);
anchorPane.getChildren().add(rectangle2);
anchorPane.getChildren().add(rectangle3);
anchorPane.getChildren().add(button1);
anchorPane.getChildren().add(button2);
Scene scene = new Scene(anchorPane, 800, 800);
stage.setScene(scene);
stage.show();
}
}
您不能Hibernate
JavaFX应用程序线程。该线程专门用于读写UI状态、调度呈现“脉冲”以及处理用户生成的事件。如果您阻止或独占了它,那么它就不能完成它的工作,并且UI冻结/变得没有响应。
无论何时您想要在JavaFX应用程序线程上执行延迟操作,无论是否循环,您都应该使用动画。就我个人而言,在本例中,我会使用时间线
。这里有一个例子:
java prettyprint-override">Timeline timeline =
new Timeline(
// first rectangle to red (assumes all start as black)
new KeyFrame(
Duration.ZERO,
e -> rectangle1.setFill(Color.RED)),
// first rectangle to black, second to green
new KeyFrame(
Duration.seconds(0.5),
e -> {
rectangle1.setFill(Color.BLACK);
rectangle2.setFill(Color.GREEN);
}),
// second rectangle to black, third to blue
new KeyFrame(
Duration.seconds(1.0), // duration doesn't stack
e -> {
rectangle2.setFill(Color.BLACK);
rectangle3.setFill(Color.BLUE);
}));
timeline.playFromStart();
您可以根据需要重用动画(尽管它不能同时运行自身的多个实例)。请注意,时间线
将异步播放,对playFromstart()
或play()
的调用将立即返回。如果这是您的应用程序的一个问题,那么您需要重写它以考虑到这一点。例如,可以使用timeline.setonfinished(...)
在完成后执行某些操作。
为了提出它们,这里至少有两种可供选择的方法(我将不详细说明):
我在更新BigQuery模式时遇到了一些延迟问题。 我有一个表,它接收流式插入,并且架构在需要时会自动更新。问题在于,架构更新似乎在一段时间内不会生效,并且在该持续时间内进行的插入会删除新列的值。 我从2016年发现了这个答案,它说在更改生效之前可能会有长达5分钟的延迟。 这种情况仍然存在吗?您如何解决这一问题?如果答案是超时,那么在写入新列之前应该等待多长时间?
我是JavaFX的新手。我有我的主要场景和次要场景;当我从第一个场景切换到第二个场景时,窗口的条形图变得可见。我该怎么解决呢?
问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :
描述 我有一个小应用程序,它使用hook更新状态,但每次更新时,都会导致页面延迟。我指的是实际的延迟,而不仅仅是“等待异步”延迟。 我的理论是,更新状态会重新呈现太多的组件,因为如果我将状态减少到更少的值,滞后就会消失。 从本质上说,我担心我更新状态的方式没有隔离我想要的值。 密码 我将回购加载到CodeSandbox:https://codesandbox.io/s/long-forest-y9
我是JavaFX的新手。我试图编程一个简单的图形用户界面,但我面临着那些可能相关的问题。我用文件选择器设置文件,并想做相当基本的操作: 保存最后使用的文件夹 在VBox中写入选中文件的名称 这是我的代码(编译): 我无法刷新节点以设置当前初始目录或在VBox上显示collecName。我试图通过重新加载对象或调整窗口大小来重新生成它们,但没有任何效果。当我在控制台上打印变量时,我看到它们发生了变化
}`我正在计划在同一舞台上使不同的部分成为自己的场景。如果有任何帮助,我将不胜感激。我正在使用NetBeans8.2。