如何在视图加载后 运行 代码块

How to run a code block after the view loads

使用 fxml 文件和控制器时,可以有一个初始化方法,该方法在视图加载前 运行s。同样,有没有办法在视图加载后 运行 一段代码?
更具体地说,我在 fxml 文件中有一个 Rectangle 。我想在视图加载并传递 LinearGradient 实例后从控制器调用 RectanglesetFill() 方法。 LinearGradient 具有没有 setter 的属性,也没有无参数构造函数,所以我认为填充 属性 不能在 fxml 文件中赋值。
我尝试将此代码放入控制器的构造函数中,但这会导致错误。如果可能的话,我还想知道当 FXMLLoader 加载 fxml 文件(何时调用构造函数)时,控制器 class 发生了什么过程。

如有必要,请看一下示例代码:

<?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>
package sample;
import javafx.fxml.FXML;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;

public class RectController{
    @FXML Rectangle rect;
    {
        //code i would like to run but currently results in an error
        rect.setFill(new LinearGradient(
            0, 0.5, 1, 0.5, true, CycleMethod.NO_CYCLE, 
                new Stop(0, Color.BLUE),
                new Stop(1, Color.RED)
        ));
    }
}

您希望您的控制器实现一个无参数 initialize() 方法,并用 @FXML 注释(旧方法是实现 javafx.fxml.Initializable 但正如您从 docs for that method, 你不再需要界面了。)

您不能在控制器的构造函数中执行此操作,因为 FXMLLoader 尚未注入字段。