2017-03-08 82 views
0

我是JavaFX的新手。我正在嘗試創建一個簡單的居中菜單,其中包含帶下面按鈕的文本。JavaFX - 如何將多個元素添加到StackPane?

我創建了兩個元素Text titleButton testButton。然後我創建了StackPane stackPane。然後,我試圖將這兩個元素添加到stackPanes孩子,並將其添加到new Scene。但是,只有最後一個元素出現。

如何添加多個元素到StackPane?

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Test Title"); 

    Text title = new Text("hey!"); 
    StackPane.setAlignment(title, Pos.TOP_CENTER); 

    Button testButton = new Button("Testing"); 
    StackPane.setAlignment(testButton, Pos.TOP_CENTER); 

    StackPane stackPane = new StackPane(); 
    stackPane.setPrefSize(300, 300); 
    stackPane.setPadding(new Insets(25, 0, 0, 0)); 

    stackPane.getChildren().add(title); 
    stackPane.getChildren().add(testButton); 

    Scene scene = new Scene(stackPane); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

enter image description here

+2

它們都在那裏,它們只是堆疊在一起(這是StackPane如何展示它的子節點)。只需使用佈局窗格,按照自己的想法擺放它們即可。 –

回答

1

我想在這裏引用官方文檔:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/StackPane.html,尤其是:

StackPane在後到前堆佈置其子。 孩子的z順序是由孩子列表的順序定義的,其中第0個孩子是最後一個孩子。如果設置了邊界和/或填充,孩子們將被放置在這些插頁內。

現在,爲了回答你的問題:你這樣做,你做了,但是你可能想既是孩子們在同一位置的偏移,因此,後來又增加了一個覆蓋是以前的所有。

您可以通過更改

Text title = new Text("Adding a very, very, very, very, very, very long text here... now that vile button should not overlap me anymore!");

或不同地設置的對準。

如果您不想通過手動定位來優化佈局,最好使用另一個Pane,例如,其中一個直接已知的子類:https://docs.oracle.com/javafx/2/api/javafx/scene/layout/Pane.html

+0

另請注意http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102 –