Javafx 如何在加载视图后运行代码块
使用fxml文件和控制器时,可能会有一个initialize方法,该方法在加载视图之前运行。类似地,是否有方法在加载视图后运行代码块?Javafx 如何在加载视图后运行代码块,javafx,fxml,Javafx,Fxml,使用fxml文件和控制器时,可能会有一个initialize方法,该方法在加载视图之前运行。类似地,是否有方法在加载视图后运行代码块? 更具体地说,我在fxml文件中有一个矩形。在视图加载并传递一个LinearGradient实例后,我想从控制器调用Rectangle的setFill()方法LinearGradient的属性没有设置器,也没有无参数构造函数,因此我认为不能在fxml文件中分配fill属性。 我尝试将此代码放入控制器的构造函数中,但这导致了一个错误。如果可能,我还想知道当fxmlo
更具体地说,我在fxml文件中有一个
矩形
。在视图加载并传递一个LinearGradient
实例后,我想从控制器调用Rectangle
的setFill()
方法LinearGradient
的属性没有设置器,也没有无参数构造函数,因此我认为不能在fxml文件中分配fill属性。我尝试将此代码放入控制器的构造函数中,但这导致了一个错误。如果可能,我还想知道当
fxmloader
加载一个fxml文件时(当调用构造函数时),控制器类会发生什么过程
如有必要,请查看此示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.shape.Rectangle?>
<Pane fx:controller="sample.RectController" xmlns:fx="http://javafx.com/fxml">
<Rectangle fx:id="rect" height="200.0" width="200.0" />
</Pane>
您希望控制器实现一个no-arg
initialize()
方法,该方法用@FXML
注释(旧方法是实现javafx.FXML.Initializable
,但从中可以看出,您不再需要该接口)
您无法在控制器的构造函数中执行此操作,因为FXMLLoader尚未注入字段。“使用fxml文件和控制器时,可能会有一个初始化方法,该方法在加载视图之前运行”——我相信这是一个误解。initialize方法是在FXML已完全加载并且FXML相关字段已注入控制器之后而不是之前调用的。谢谢。成功了。我的印象是在处理根元素之前调用了
initialize()
方法,但这解决了我的问题。