我可以將Node
的父母更改爲FXML中的其他父母嗎?如何將孩子fxml的父母換成其他父母?
假設一個父節點stackcon
與一個子節點。 我現在要將此子節點移動到不同的父級,例如名爲stackmain
。
這可能嗎?如果是,請給我一個鏈接或示例代碼。
我可以將Node
的父母更改爲FXML中的其他父母嗎?如何將孩子fxml的父母換成其他父母?
假設一個父節點stackcon
與一個子節點。 我現在要將此子節點移動到不同的父級,例如名爲stackmain
。
這可能嗎?如果是,請給我一個鏈接或示例代碼。
這只是如何做到這一點的許多方法之一。
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);
}
}
}
您會看到,如果標籤位於左側,我只需點擊按鈕即可。如果是這樣,請將其在左側移除並將其添加到右側。 類似的,如果它在右側,將其移除並將其添加到左側。
https://stackoverflow.com/questions/45318424/child-fxml-file-not-loading-to-parent-fxml/45320747#45320747其實我想爲這個問題的解決方案 – Rocky
@Rocky:是的,然後採取邏輯我提出,這對你的問題是完全正確的。只是,不是按下按鈕,在您的問題中,事件處理程序必須註冊到事件「當用戶單擊表格行時」。如果這個答案對你有幫助,請注意它(並接受它作爲答案)。 –
你正在切換到單父fxml視圖(即stackpane是常見的),但在我的情況下,有超級父窗格,父窗格和子窗體。孩子得到加載到父窗格沒有問題,但當我試圖加載到超級父窗格它的拋出錯誤stackhome.getChildren()。clear(); 。stackhome.getChildren()加( 「an.fxml」); stackhome是超級父母堆棧 – Rocky
它可以根據類型的stackmain
& stackcon
窗格中,我假設你使用AnchorPane
有所不同,但它是這樣的
Node childNode = stackcon.getChildren().get(indexOfChild);
stackcon.getChildren().remove(indexOfChild);
stackmain.getChildren().add(childNode);
所以,基本上,你要移動從一個'Parent'到另一個'Parent'的某個'Node',即將它從第一個'Parent'中移除並添加到第二個'Parent'中? –
@ MarkusWeninger是的,但我不知道如何做到這一點,以及明確的父母,我想加載該子fxmll文件 – Rocky
我添加了答案。這是你想要的嗎? –