我有2个fxml
FXML A: 它包含ID为fx的边框:id =" UnitBorderPane"
FXML B: 它包含ID为fx的锚点:id =" UnitForm"
我加载" FXML B"在左侧的borderpane A
FXMLLoader loader = new
FXMLLoader(getClass().getResource("/projectname/unit/UnitForm.fxml"));
Pane pane = (Pane) loader.load();
UnitBorderPane.setLeft(pane);
它是一种fxml形式,所以我们有一个带动作的按钮
<Button layoutX="102.0" layoutY="169.0" mnemonicParsing="false" onAction="#saveUnit" text="Save" />
如何隐藏FXML一个BorderPane?
@FXML
private void saveUnit(ActionEvent event) {
BorderPane borpane = (BorderPane)UnitForm.getParent().lookup("#UnitBorderPane");
borpane.setLeft(null);
}
此代码不起作用,borpane变量为null,因此我无法将borderPane FXML A Left设置为null。
答案 0 :(得分:0)
我认为应该只是
BorderPane borpane = (BorderPane)UnitForm.getParent();
然而,这些都不是非常强大;例如,如果您决定更改布局结构,则可能需要在各种类中更改许多代码。我会向UnitForm.fxml
的控制器添加一个属性,您可以从控制器中查看UnitBorderPane
。类似的东西:
public class UnitFormController { // your actual class name may differ....
private final BooleanProperty saved = new SimpleBooleanProperty();
public BooleanProperty savedProperty() {
return saved ;
}
public final boolean isSaved() {
return savedProperty().get();
}
public final void setSaved(boolean saved) {
savedProperty().set(saved);
}
// other code as you already have...
@FXML
private void saveUnit() {
setSaved(true);
}
// ...
}
然后你做
FXMLLoader loader =
new FXMLLoader(getClass().getResource("/projectname/unit/UnitForm.fxml"));
Pane pane = (Pane) loader.load();
UnitFormController controller = loader.getController();
controller.savedProperty().addListener((obs, wasSaved, isNowSaved) -> {
if (isNowSaved) {
UnitBorderPane.setLeft(null);
}
});
UnitBorderPane.setLeft(pane);
现在UnitBorderPane
的管理都在一个地方,而不是分成两个控制器,并且没有查找(不健壮)。 UnitForm
的控制器只是设置一个属性,让其他控制器按照自己的意愿做出响应。