java JavaFX在控制器内切换自身的可见性
我有一个StackPane,它由其他地方包含的边框窗格组成。除第一个窗格外,所有窗格都设置为visible=false。以下是我所拥有的一个概括的例子:
堆叠。fxml
<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:
第二。fxml
<BorderPane fx:controller="BorderTwoController">
<Button fx:id="close" text="Close" />
</BorderPane>
边界控制器
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());
});
}
}
应用程序启动时不显示边框2(正确)
“显示边框二”按钮显示边框二(正确)
“关闭”按钮不会隐藏边框两窗格
有趣的是,print语句说,visible属性设置为false后现在为false,尽管BorderPane在屏幕上仍然可见。这是怎么回事?我使用的是JavaFX8U60
# 1 楼答案
多亏了一条评论,我找到了解决办法。我混淆了控制器和自定义组件。通过改变解决了这个问题:
第二。fxml
边界控制器。爪哇
BorderTwoController虽然扩展了BorderPane,但实际上并不是StackPane,因为它只是BorderTwo的控制器。fxml。向边界添加一个fx:id。fxml,然后从控制器链接到它以切换可见性,效果很好