作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我的第一个 JFX 应用程序已启动并正在运行。
现在,我问自己,一切是如何在幕后完美地包裹起来的。所有这些 FXML 是如何通过正确的实例化转换为 java 代码的?它是如何工作的?
如果我知道要写什么,我会在 Google 上搜索,但到目前为止,我找到了很多关于如何使用它的信息,但很少了解它是如何制作的。
最佳答案
奇迹发生在 FXMLLoader
内部。
它接收 FXML 文件,并使用 XML 解析器对其进行解析。您被迫使用一组定义良好的 XML 节点,并且加载器知道如何在运行时将这些 XML 节点的每种类型“转换”为相应的 java 对象(转换为 JavaFX Node
)。如果 XML 文件的格式不正确(不符合定义的结构),您将收到异常。这样你的节点就创建好了,剩下一件事:填充 Controller 。
为了填充 Controller ,它将使用反射来创建指定 Controller 类的实例并设置其数据成员。它循环访问内部的 @FXML
带注释的字段,然后将每个字段设置为具有匹配 fx:id
属性的已创建对象之一。
最后,默认情况下,在 Controller 实例上调用公共(public) initialize
方法。
关于JavaFX : When/Where are elements/controls instantiated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624885/
我是一名优秀的程序员,十分优秀!