2016-02-01 44 views
0

在一個VBox中我已經有了兩個Grid Panes。現在我想在它們之間插入一個新的錨點窗格。如果我使用下面的代碼,它會在最後插入錨窗格,但我希望它在gridpanes之間。有什麼辦法嗎?在Javafx中插入一個窗格

+0

@James_D我明白你爲什麼鏈接關於ArrayList中的答案複製的,但我不認爲它直接回答OP的問題。 –

+0

它不是? 'getChildren()'返回一個'List';問題是詢問如何將物品放置在該列表中的特定位置。鏈接的問題詢問如何在列表中的特定索引處插入元素。我誠實地看到這兩個問題沒有區別:在這兩種情況下,OP都不知道重載的'add(int index,E element)'方法。 –

+0

@James_D我認爲OP不知道'getChildren()'中元素的順序決定了所示節點的「視覺順序」。這就像這個問題的答案是A-> B-> C,但鏈接答案只是B-> C –

回答

0

由於您使用的是VBox作爲主容器,其子級索引決定了它們的垂直位置。 因此,如果你想在中間放置一個子節點,只需將它插入由getChildren()方法返回的列表的中間。

這是一個完整的可運行的例子:

public class Example extends Application { 

    public static void main(String[] args) { 
    launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
    GridPane gridTop = new GridPane(); 
    GridPane gridBottom = new GridPane(); 
    VBox mainPanel = new VBox(gridTop, gridBottom); 

    Label topLabel = new Label("Top"); 
    gridTop.add(topLabel, 0, 0); 
    Button createAnchorPane = new Button("Create AnchorPane"); 
    gridBottom.add(createAnchorPane, 0, 0); 

    createAnchorPane.setOnAction(event -> { 
     Label centerLabel = new Label("Center"); 
     AnchorPane newPane = new AnchorPane(); 
     newPane.getChildren().add(centerLabel); 
     // add the anchor pane in the middle 
     mainPanel.getChildren().add(1, newPane); 
    }); 

    Scene scene = new Scene(mainPanel, 400, 400); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
    } 
}