我可以将Node
的父级更改为FXML中的另一位父级吗?
假设一个名为stackcon
的父节点具有子节点。
我现在想将此子节点移动到不同的父节点,例如,名为stackmain
。
这可能吗?如果是,请给我一个链接或示例代码。
答案 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);