У меня есть StackPane, состоящий из BorderPane, которые включены из других источников. Все, кроме первой панели, имеют значение visible = false. Вот обобщенный пример того, что у меня есть:
Stacks.f xml
<StackPane fx:controller="StackController">
<fx:include source="borderOne.fxml" />
<Button fx:id="showBorderTwo" text="Show Border Two" />
<fx:include fx:id="borderTwo" source="borderTwo.fxml" visible="false"/>
</StackPane>
StackController имеет:
public class StackController extends StackPane implements Initializable {
@FXML
Button showBorderTwo;
@FXML
BorderPane borderTwo;
public void initialize(URL location, ResourceBundle resources) {
showBorderTwo.setOnAction((event) -> {
borderTwo.setVisible(true);
});
}
}
Теперь эта часть работает нормально. Однако BorderTwo имеет:
BorderTwo.f xml
<BorderPane fx:controller="BorderTwoController">
<Button fx:id="close" text="Close" />
</BorderPane>
BorderTwoController
public class BorderTwoController extends BorderPane implements Initializable {
@FXML
Button close;
public void initialize(URL location, ResourceBundle resources) {
close.setOnAction((event) -> {
setVisible(false);
System.out.println("visible: " + visibleProperty().toString());
});
}
}
Приложение запускается без отображения второй границы (правильно).
Кнопка «Показать границу два» отображает границу два (правильно).
Кнопка «Закрыть» не скрывает панель двух границ .
Интересно, что оператор печати говорит, что свойство visible теперь имеет значение false после установки значения false, несмотря на то, что BorderPane остается видимым на экране. Что тут происходит? Я использую JavaFX 8u60.