2017-03-08 4 views
0

私はJavaFXを使い慣れています。私は下のボタンを含むテキストを含むシンプルなメニューを作成しようとしています。JavaFX - StackPaneに複数の要素を追加するにはどうすればいいですか?

私はText titleButton testButtonの2つの要素を作成しました。それから私はStackPane stackPaneを作成しました。私は次にstackPanesの子供に2つの要素を追加し、それを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 –

関連する問題