使用 fxml 将模型绑定到自定义控件
Bind model to a custom control using fxml
我必须自定义控件,parent 和 child。并且想要使用 fxml 将模型的一部分分配给 child,这不是 parent 中可用的简单字符串。可能吗?
Parent
public class ParentControl extends VBox {
public LocalDate getDate() {
return LocalDate.now();
}
public ParentControl() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(
"/parent.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
....
自定义控件
public class CustomControl extends VBox {
@Getter
@Setter
LocalDate date;
parent.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import com.example.javafx.CustomControl?>
<?import javafx.scene.layout.VBox?>
<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml">
<CustomControl date="${date}"/>
</fx:root>
@Getter
@Setter
LocalDate date;
我猜你在那里使用 Lombok? Lombok 目前不支持 JavaFX(有一个开放的功能请求),一旦支持,我猜它会使用不同的注释。
对于 属性 绑定,您需要一个 JavaFX 属性:
private final ObjectProperty<LocalDate> date= new SimpleObjectProperty<>(this, "date", null);
[...]
public final LocalDate getDate() {
return dateProperty().get();
}
public final void setDate(LocalDate date) {
dateProperty().set(date);
}
public ObjectProperty<LocalDate> dateProperty() {
return date;
}
您需要更改为 ObservableValue 的 ParentControl 的日期 属性。问题是 LocalDate.now 的预期行为是什么?你希望 CustomControl.date 总是有当前时间吗?还是初始化的时间?
我必须自定义控件,parent 和 child。并且想要使用 fxml 将模型的一部分分配给 child,这不是 parent 中可用的简单字符串。可能吗?
Parent
public class ParentControl extends VBox {
public LocalDate getDate() {
return LocalDate.now();
}
public ParentControl() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(
"/parent.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
....
自定义控件
public class CustomControl extends VBox {
@Getter
@Setter
LocalDate date;
parent.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import com.example.javafx.CustomControl?>
<?import javafx.scene.layout.VBox?>
<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml">
<CustomControl date="${date}"/>
</fx:root>
@Getter @Setter LocalDate date;
我猜你在那里使用 Lombok? Lombok 目前不支持 JavaFX(有一个开放的功能请求),一旦支持,我猜它会使用不同的注释。
对于 属性 绑定,您需要一个 JavaFX 属性:
private final ObjectProperty<LocalDate> date= new SimpleObjectProperty<>(this, "date", null);
[...]
public final LocalDate getDate() {
return dateProperty().get();
}
public final void setDate(LocalDate date) {
dateProperty().set(date);
}
public ObjectProperty<LocalDate> dateProperty() {
return date;
}
您需要更改为 ObservableValue 的 ParentControl 的日期 属性。问题是 LocalDate.now 的预期行为是什么?你希望 CustomControl.date 总是有当前时间吗?还是初始化的时间?