有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    多亏了一条评论,我找到了解决办法。我混淆了控制器和自定义组件。通过改变解决了这个问题:

    第二。fxml

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

    边界控制器。爪哇

    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。向边界添加一个fx:id。fxml,然后从控制器链接到它以切换可见性,效果很好