如何将子fxml的父级更改为其他父级?

时间:2017-07-27 05:18:20

标签: javafx javafx-8 fxml fxmlloader

我可以将Node的父级更改为FXML中的另一位父级吗?

假设一个名为stackcon的父节点具有子节点。 我现在想将此子节点移动到不同的父节点,例如,名为stackmain

这可能吗?如果是,请给我一个链接或示例代码。

2 个答案:

答案 0 :(得分:1)

这只是如何做到这一点的众多方法之一。

MainView.fxml,只是一个包含按钮的简单视图,点击按钮时,标签应该从右向左移动,反之亦然(请参阅onMousePressed声明):

<fx:root type="BorderPane" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
    <left>
        <VBox fx:id="lefty">
            <Label fx:id="switchy" text="Switching text"></Label>
        </VBox>
    </left>
    <center>
        <Button fx:id="switchBtn" text="Switch" onMousePressed="#switchButtonPressed"></Button>
    </center>
    <right>
        <VBox fx:id="righty">
        </VBox>
    </right>
</fx:root>

控制器 MainView.java及其switchButtonPressed 事件处理程序

public class MainView extends BorderPane {
    @FXML private VBox lefty;
    @FXML private VBox righty;
    @FXML private Label switchy;

    public MainView() {
        URL fxmlFile = MainView.class.getResource("MainView.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader(fxmlFile);
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);

        try {
            fxmlLoader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void switchButtonPressed(MouseEvent mouseEvent) {
        if(lefty.getChildren().contains(switchy)) {
            lefty.getChildren().remove(switchy);
            righty.getChildren().add(switchy);
        } else {
            righty.getChildren().remove(switchy);
            lefty.getChildren().add(switchy);
        }
    }
}

你知道,如果标签在左侧,我只需点击按钮即可。如果是这样,请将其从左侧移除并将其添加到右侧。 类似地,如果是在右侧,则将其移除并将其添加到左侧。

答案 1 :(得分:1)

它可能会因stackmain&amp;的窗格类型而异。 stackcon,我假设您使用AnchorPane

但它是这样的

Node childNode = stackcon.getChildren().get(indexOfChild);
stackcon.getChildren().remove(indexOfChild);
stackmain.getChildren().add(childNode);