当前位置: 首页 > 知识库问答 >
问题:

JavaFX停止时间线

房光临
2023-03-14
            <Button id="button" layoutX="691.0" layoutY="305.0" mnemonicParsing="false" onAction="#btn_startmes" prefHeight="34.0" prefWidth="115.0" text="%start" />
@FXML      
private void btn_stopmes(ActionEvent event) {
  MotionCFp Stopping = new MotionCFp();
Stopping.animation.stop();
}  

motioncfp.java:

    @Override
    public void start(final Stage stage) throws Exception {
       else{
        ResourceBundle motionCFp = ResourceBundle.getBundle("motionc.fp.Bundle", new Locale("en", "EN"));
        AnchorPane root = (AnchorPane) FXMLLoader.load(MotionCFp.class.getResource("gui.fxml"), motionCFp);
        final guiController gui = new guiController();
        Scene scene = new Scene(root);
        stage.setTitle(motionCFp.getString("title"));
        stage.setResizable(false);
        stage.setScene(scene);        
        root.getChildren().add(gui.createChart());
                animation = new Timeline();
                animation.getKeyFrames().add(new KeyFrame(Duration.millis(1000/60), new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent actionEvent) {
                // 6 minutes data per frame
                for(int count=0; count < 6; count++) {
                    gui.nextTime();
                    gui.plotTime();
                    animation.pause();
                    animation.play();
                }
            }
        }));
        animation.setCycleCount(Animation.INDEFINITE);
        stage.show();
        animation.play();
       } 

   }

共有1个答案

海翼
2023-03-14

您需要的是控制器中对应用程序的start方法中创建的原始动画的引用。这将允许您在控制器中编写按钮事件处理程序以停止动画。

MotionCFP类可以包含以下代码:

final FXMLLoader loader = new FXMLLoader(
  getClass().getResource("gui.fxml"), 
  ResourceBundle.getBundle("motionc.fp.Bundle", new Locale("en", "EN"))
);
final Pane root = (Pane) loader.load();
final GuiController controller = loader.<GuiController>getController();
...
animation = new Timeline();
controller.setAnimation(animation);

Guicontroller类可以包含以下代码:

private Timeline animation;

public void setAnimation(Timeline animation) {
  this.animation = animation;
}

@FXML private void btn_stopmes(ActionEvent event) {
  if (animation != null) {
    animation.stop();
  }
}  
 类似资料:
  • 代码非常简单,我搜索了一下,发现我只会用到 这似乎不起作用,我也尝试过使用平台参数,比如 下面是您可以运行的测试应用程序: 锁定得可拥有同步器:-无 更新:我正在Linux Fedora 16 64bit上使用最新的Oracle JDK 7u17 64bit。

  • 有没有你可以开始和停止一个动画,所以播放1秒,停止1秒?我尝试过用单选按钮与Thread.Sleep切换来实现这一点,但是我认为这种方式是不可能的。有没有其他方法可以做到这一点?多谢了。

  • 问题内容: 我在Python 3.4上的Scipy模块中使用了minimum,具体是: 可以设置最大迭代次数(如上所述),但是有没有办法告诉最小化在给定的设置时间之后停止搜索解决方案?我查看了最小化的常规选项以及SLSQP求解器的特定选项,但无法解决。 谢谢 问题答案: 否。您可以做的是在一个单独的进程中启动优化器,跟踪其运行时间并在必要时终止它:

  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • 我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我使用JavaFx框架(有一些功能,我需要像css样式的文本)我只是生成一些形状和文本到一个隐藏的场景,然后保存在文件中仅此而已, 我知道要使用JavaFx,我必须将图形操作传递给JavaFx线程,但是当一切都完成后,我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开...我真的不想强行退出System.exit(),因为

  • 第一个线程组-Wisebuy 1-1在2019-04-30 15:46:11,559开始 我将上升周期设置为1秒,为什么线程组-Wisebuy 1-5891在2019-04-30 15:46:15,541开始? 我将持续时间设置为2秒,为什么线程组-Wisebuy 1-7239在2019-04-30 15:46:18,767停止?