栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

刷新JavaFX GUI

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

刷新JavaFX GUI

直到最后您都看不到效果,因为您正在FX Application
Thread上执行所有操作。这是负责呈现UI的同一线程,因此,如果对该线程执行了某些操作(例如

SolveClicked
[sic:请使用正确的命名约定
]方法),则在操作完成之前无法呈现UI。

如果您以正确的方式思考,那么您真正要做的就是创建动画。(您不仅要显示解决方案,还想向用户显示多个“动画帧”,每个动画帧代表解决方案中的一个步骤。)因此,您应该使用animation
API。最简单的方法可能是

Timeline

@FXMLprotected void solveClicked(ActionEvent event) {    Timeline timeline = new Timeline(        new Keyframe(Duration.millis(500), e -> L()),        new Keyframe(Duration.millis(1000), e -> R()),        new Keyframe(Duration.millis(1500), e -> F()),        new Keyframe(Duration.millis(2000), e -> B()));    timeline.play();}

如果您需要一种更“自动化”的方式来生成时间轴,则可以执行以下操作(有趣):

@FXMLprotected void solveClicked(ActionEvent event) {    Runnable[] steps = new Runnable[] {this::L, this::R, this::F, this::B};    createTimeline(steps, 500).play();}private Timeline createTimeline(Runnable[] steps, int delay) {    Duration frameTime = Duration.millis(delay);    Duration increment = Duration.millis(delay);    Timeline timeline = new Timeline() ;    for (Runnable step : steps) {        timeline.getKeyframes().add(new Keyframe(frameTime, e -> step.run()));        frameTime = frameTime.add(increment);    }    return timeline ;}

一种更复杂的方法可能是通过动画(显示实际旋转)来表示一张脸的每一个动作,然后将它们全部组合成一个

SequentialTransition



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号