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

在JavaFx中,场景图的呈现是如何执行或触发的

鲁涵映
2023-03-14

我试图理解在JavaFX中节点是如何呈现到屏幕上的,以及是什么触发了这个过程,因为我想在JavaFX中创建一个自定义控件。我有使用Android的View类的经验,其中视图的绘制与JavaFX中的场景图的绘制是不同的。

例如,在Android中,我可以创建一个自定义的视图并覆盖ondraw(Canvas Canvas)方法。在ondraw()中,我可以通过绘图目录将所有绘图需求放置到canvas对象中。在UI线程上调用该方法,一旦ondraw完成,画布就会自动显示。我可以随时通过调用视图的invalidate()方法(如果在GUI线程上)或postinvalidate()(如果不在GUI线程上)来触发视图的重新绘制。

在JavaFx中,我不使用画布对象,而是使用节点对象,而且据我所知,没有ondraw()的等价物。因此,如果我正在创建一个自定义控件,我将扩展Control类,并创建一个扩展SkinBase的类。SkinBase类是我通过创建各种节点对象来创建自定义控件的“外观”的地方。但后来:

  1. 如何处理这些节点对象才能真正呈现它们?
  2. 如果需要更改其中一个节点的某些属性,例如它的颜色,该怎么办?
  3. 如何使皮肤“无效”以从GUI或其他线程重新呈现?

很明显,我试图与Android的View类的工作方式进行比较,这有可能混淆Android和JavaFx呈现过程的工作方式,但Android是我的知识起点。

共有1个答案

终子昂
2023-03-14
  1. 无:一旦节点成为场景图的一部分,FX呈现系统将呈现它们
  2. 又一次,什么也没有。JavaFX有一个可观察的属性API。影响外观的节点属性由这些可观察属性表示。因此,如果属性发生变化,则会观察到该变化,并且FX呈现系统知道在下一个呈现脉冲上重新呈现该节点。
  3. 必须从FX应用程序线程执行此操作。如2.所示,您只需更改属性的值,节点(以及场景图中的祖先节点)就会自动失效。同样,对作为场景图一部分的节点的更改必须发生在FX应用程序线程上。您可以使用platform.runlater(...)安排代码从后台线程在FX应用程序线程上执行(或使用JavaFX并发API)。
 类似资料:
  • 问题内容: 我有一个prefHeight = 70 //没有prefWidth或任何宽度的HBox … 我也有一个prefWidth = 50 //没有prefHeight或任何高度的窗格… 我只想使用某些循环将窗格的多个实例添加到HBox。 当我在循环主体中添加(pane)时,出现以下错误。 我需要找到克隆窗格的方法(因为它按值传递)。有人可以帮我吗?(对我来说,拍摄快照不起作用,因为未使用父级

  • 我看了很多页,试图找出如何切换场景,但都没有成功。 我有一个计算器,我的目标是选择一个菜单选项来更改计算器(即:基础和科学)。现在我只是在测试,所以这里是我到目前为止与这个问题相关的代码(我使用的是场景生成器): 编辑我已经尝试了很多东西。不管怎样,我总是得到这个NullPointerException。我有一种感觉,这可能与在场景生成器中设置某些内容有关,但我就是找不到答案 工作代码: 我使用下

  • 问题内容: 我有一个使用javafx Scene来渲染某些东西的应用程序,并且我想将该渲染结果放入我在Javafx中创建的某些GUI中。我该怎么做? 基本上,有一些容器可以放入场景,然后将其放入GUI。 抱歉,如果是新手问题,我是JavaFX的新手 问题答案: 该场景只有一个顶级父节点作为根。您可以获取它并放入另一个场景。

  • 我想写一个包含以下类的游戏: 我希望所有这些课程都能在舞台上使用。首先,我启动startUp类,几秒钟后,我想删除startUp stackpane并更改场景(例如从fxml文件读取),但我是javafx中的noob。有什么想法吗?

  • 问题内容: 如何将JavaFX 2中图形的内容输出到。实际上,我正在开发一个基本上设计卡片的应用程序。因此,用户只需单击各种选项即可自定义场景。最后,我想将场景内容导出到图像文件。我怎么做 ? 问题答案: 为此,在FX 2.2中出现了新的快照功能。你可以说 对于较旧的FX,您可以使用AWT机械手。这不是一个很好的方法,因为它需要启动整个AWT堆栈。

  • 在我的web模块中有3个JAR。slf4j jar、log4j jar和slf4j-log4j12 jar和log4j.xml如下所示。 并且在我的服务模块和dao模块中只包含slf4j JAR。和日志记录详细信息在文件中。(所有模块的日志记录详细信息) hibernate和Spring的记录器是否也可以在我的文件中使用?记录文件中异常发生的方式? 谢谢你