在这种情况下,我建议您改用自定义组件。首先为您的内容创建一个自定义组件:
class Content2 extends AnchorPane {
Content() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("vista2.fxml");
loader.setRoot(this);
loader.setController(this);
loader.load();
}
}
将文件AnchorPane
根目录中的标记替换为:vista2.fxml
fx:root
<fx:root type="javafx.scene.layout.AnchorPane" xmlns:fx="http://javafx.com/fxml">
...
</fx:root>
然后,您只需使用自定义事件绑定和箭头函数即可完成此操作。将事件处理程序属性添加到您的Content
类:
private final ObjectProperty<EventHandler<ActionEvent>> propertyOnPreviousButtonClick = new SimpleObjectProperty<EventHandler<ActionEvent>>();
@FXML
private void onPreviousButtonClick(ActionEvent event) {
propertyOnPreviousButtonClick.get().handle(event)
}
public void setOnPreviousButtonClick(EventHandler<ActionEvent> handler) {
propertyOnPreviousButtonClick.set(handler);
}
最后,在您的 java 代码或 fxml 中绑定您的自定义事件处理程序:
@FXML
onNextButtonClick() {
Content2 content2 = new Content2();
content2.setOnPreviousButtonClick((event) -> {
Content1 content1 = new Content1();
layout.getChildren().clear();
layout.getChildren().add(content1);
});
layout.getChildren().clear();
layout.getChildren().add(content2);
}
如果您不想动态添加内容,只需setVisible()
添加true
或false