如何自动从JavaFX New Scene运行代码

我对Java完全陌生,我在为学校项目开发应用程序时正在学习它。

Image Link

我想对以上程序进行编码。在其中

  1. 用户将在屏幕1中单击“就绪”按钮。
  2. 然后将出现第二个屏幕,并按照我给定的顺序显示蝴蝶的图像[使用CSV文件预设]如屏幕2和3所示。
  3. 最后,按钮集将出现在网格中,并且用户必须按照蝴蝶外观的顺序选择按钮。

我一直在寻找一种方法来启动屏幕2并自动播放蝶形音序。

我尝试将image.setimage()放在屏幕2控制器的initialize()块上,并在每个setimage()之间设置了延迟。但它确实起作用。

任何人都可以建议我一种处理此类任务的方法吗?提前非常感谢。

shilaoban2 回答:如何自动从JavaFX New Scene运行代码

对于初学者来说,这种代码经常出现的问题是在应用程序线程上执行sleep或其他长时间运行的操作来制作动画。但是,阻塞javafx应用程序线程会导致场景无法更新,从而导致gui冻结。

您要么需要将此动画的长时间运行部分移至后台线程,并使用Platform.runLater进行任何GUI更新,要么使用专门用于此目的的东西。 javafx.animation包中可能有多个有用的类,但最方便的似乎是Timeline

将运动顺序存储在合适的数据结构中,并使用Timeline定期触发事件处理程序以更新gui:

List<FieldIndices> fieldIndices = ...
final Iterator<FieldIndices> iterator = fieldIndices.iterator();

final Timeline timeline = new Timeline();
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1),evt -> {
    if (iterator.hasNext()) {
        moveButterfly(iterator.next());
    } else {
        removeButterfly();
        timeline.stop();
    }
}));
timeline.setCycleCount(Animation.INDEFINITE); // repeat until stop is called
timeline.play();

现在剩下要做的就是将数据读取到列表中,并实现将蝶形移到新位置的逻辑。

请注意,实际上我不建议使用两个以上的场景:用户期望按钮和显示蝴蝶的“字段”处于相同位置。如果设计2个fxml,则对一个场景的任何调整都将要求您对另一个场景进行相同的调整。这使布局难以维护。另一种选择是您需要用Java代码创建场景,但是场景的重复性使得无论如何这都是一个好主意。 (另一种方法是将16个字段注入控制器,并将它们收集到合适的数据结构中;这容易出错,并且对按钮之一进行任何更改都可能需要对fxml进行16次更改。使用嵌套的for循环,您需要编写仅在将按钮存储在例如嵌套数组中后才创建按钮的逻辑可以同时进行...)

,

据我了解,一旦显示了第二阶段,您就想玩蝴蝶序列...要实现这一目标,您可以尝试以下操作:

List positions = new ArrayList(); //places to show butterfly (e.g. table cells)
secondStage.setOnShown(windowEvent -> {
    // update UI with Pltform.runLater()
    // moveButerflyTo() is your method to place butterfly on given place
    positions.forEach(position -> Platform.runLater(() -> moveButerflyTo(position)));
});

我没有尝试过,但是可以完成工作...

本文链接:https://www.f2er.com/3153983.html

大家都在问