Как изменить родителя дочернего fxml на другого родителя?

Могу ли я изменить Nodeявляется родителем другого родителя в FXML?

Предположим, родитель по имени stackcon с дочерним узлом. Теперь я хочу переместить этот дочерний узел к другому родителю, например, с именем stackmain,

Это возможно? Если да, пожалуйста, дайте мне ссылку или пример кода.

2 ответа

Это может варьироваться в зависимости от типа панели stackmain & stackcon Я предполагаю, что вы используете AnchorPane

но это как то так

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

Это только один из многих способов сделать это.

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

Видите ли, я просто проверяю нажатие кнопки, если метка находится на левой стороне. Если так, удалите это на левой стороне и добавьте это на правой стороне. Аналогично, если он находится с правой стороны, удалите его и добавьте с левой стороны.

Другие вопросы по тегам