如何在视图加载后 运行 代码块
How to run a code block after the view loads
使用 fxml 文件和控制器时,可以有一个初始化方法,该方法在视图加载前 运行s。同样,有没有办法在视图加载后 运行 一段代码?
更具体地说,我在 fxml 文件中有一个 Rectangle
。我想在视图加载并传递 LinearGradient
实例后从控制器调用 Rectangle
的 setFill()
方法。 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 尚未注入字段。
使用 fxml 文件和控制器时,可以有一个初始化方法,该方法在视图加载前 运行s。同样,有没有办法在视图加载后 运行 一段代码?
更具体地说,我在 fxml 文件中有一个 Rectangle
。我想在视图加载并传递 LinearGradient
实例后从控制器调用 Rectangle
的 setFill()
方法。 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 尚未注入字段。