Как изменить родителя дочернего 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);
}
}
}
Видите ли, я просто проверяю нажатие кнопки, если метка находится на левой стороне. Если так, удалите это на левой стороне и добавьте это на правой стороне. Аналогично, если он находится с правой стороны, удалите его и добавьте с левой стороны.