gpt4 book ai didi

JavaFX 在 Controller 内切换自身的可见性

转载 作者:行者123 更新时间:2023-12-02 08:47:53 24 4
gpt4 key购买 nike

我有一个由其他地方包含的 BorderPanes 组成的 StackPane。除第一个 Pane 之外的所有 Pane 均设置为visible=false。这是我所拥有的一般示例:

Stacks.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 有:

BorderTwo.fxml

<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());
});
}
}

应用程序启动时不显示边框二(正确)。

“显示边框二”按钮显示边框二(正确)。

“关闭”按钮不会隐藏边框两个 Pane

有趣的是,打印语句表示,将可见属性设置为 false 后现在为 false,尽管 BorderPane 在屏幕上仍然可见。这里发生了什么?我正在使用 JavaFX 8u60。

最佳答案

通过评论找到了解决方案。我混淆了 Controller 和自定义组件。通过更改解决了这个问题:

BorderTwo.fxml

<BorderPane fx:id="menu" fx:controller="BorderTwoController">
<Button fx:id="close" text="Close" />
</BorderPane>

BorderTwoController.java

public class BorderTwoController implements Initializable {
@FXML
BorderPane menu;

@FXML
Button close;

public void initialize(URL location, ResourceBundle resources) {
close.setOnAction((event) -> {
menu.setVisible(false);
});
}
}

BorderTwoController 尽管扩展了 BorderPane,但实际上并不是 StackPane,因为它只是 BorderTwo.fxml 的 Controller 。将 fx:id 添加到 BorderTwo.fxml,然后从 Controller 链接到此以切换可见性效果很好。

关于JavaFX 在 Controller 内切换自身的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60964156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com