7

有没有办法强制 JavaFX 应用程序在继续之前重新绘制自己?类似于 Swing Panel 的 paint(Graphic g) 方法(我可能在那里弄​​错了关键字)。

考虑以下示例:您编写了一个井字游戏应用程序以及计算机播放器所需的 AI。您希望能够展示两个电脑玩家对决的能力。也许您在计算机转动之间暂停两秒钟,以赋予它栩栩如生的效果。当您点击“开始”按钮时,会出现很大的无响应暂停(9 圈经过的时间以及计算机“决定”的假暂停),然后应用程序的视觉效果突然更新为已完成游戏的状态。

一旦应用程序线程中的处理完成,JavaFX 似乎会重新绘制?我不完全确定这里。

谢谢!

4

3 回答 3

6

你说的对。JavaFX 是事件驱动和单线程的。这意味着重绘和事件响应不能同时进行。长时间运行的任务应该在单独的线程上执行,这样它们就不会阻塞 UI 的渲染,当任务完成时,它可以通过调用 FX.deferAction() 同步回 FX 线程,这将简单地执行主线程上的代码线。

于 2009-02-09T15:25:40.067 回答
1

这不会是最有帮助的答案,因为我已经玩了半天 JavaFX,但是您不会使用时间轴、关键帧和绑定来完成重绘,而不是像您描述的那样明确调用它们吗?

有关示例,请参阅本教程。

于 2009-02-09T22:40:35.280 回答
1

JavaFX 的模型是将您与屏幕上的“东西”的绘画区分开来。这非常强大,但与您可能熟悉的方式有所不同。

鲸鱼是正确的,在 JavaFX 中执行此操作的适当方法是制作一个时间线,其中移动每 X 秒完成一次,并将在该关键帧处绘制。

如果您对如何执行此操作有疑问,请尝试并使用一些代码提出新问题。

于 2009-03-10T22:33:35.160 回答