web-dev-qa-db-ja.com

JavaFX 1つのシーンに複数のペインがありますか?

私は、日付が上部にあり(常に自動的に中央に配置されます)、コンテンツが下部にあり、どの方向にも配置されないアプリケーションを作成しようとしています。

これを行う最善の方法は、

Pane normalLayout = new Pane();
StackPane centeredLayout = new Stackpane();
Label centeredText = new Label("I want this text centered!");
Button unorganizedButton = new Button("Press me");
centeredLayout.getChildren().add(centeredText);
normalLayout.getChildren().add(unorganizedButton);

しかし、私は次のようなことはできません:

Scene myScene = new Scene(centeredLayout, normalLayout, 500, 500);
Window myWindow = new Window();
myWindow.setScene(myScene);
myWindow.show();

それでは、これをどのように行うことができますか?どのようにして同じシーンに複数のペインを存在させることができますか?

6
Hatefiend

シーン自体は、rootペインを1つだけ持つことができます。したがって、シーンに2つのペインが必要な場合は、3が必要です。

Scene  
  |   
  V
Root Pane (Vbox for example)
  |                   |
  V                   V
Pane1                Pane2

あなたのコードではこれは次のようになります:

StackPane rootPane = new StackPane();
Scene scene = new Scene(rootPane,...);
Pane pane1 = new Pane();
Pane pane2 = new Pane();
rootPane.getChildren().addAll(pane1,pane2);

アプリケーションのレイアウト方法に応じて、適切なペイン実装を選択する必要があります。

すべてのレイアウトコンテナに慣れるためのちょっとしたヒントとして、SceneBuilderアプリケーションを試してください。 http://gluonhq.com/open-source/scene-builder/

多分このリンクは、JavaFXでのレイアウトの仕組みを理解するのに役立ちます: http://docs.Oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htmhttps:// docs .Oracle.com/javafx/2/layout/builtin_layouts.htm

11
Marcel

「ルート」ペインを作成することをお勧めします。あなたのケースでは、BorderPaneを使用できます。

例:

BorderPane root = new BorderPane();

Label centeredText = new Label("I want this text centered!");
Button unorganizedButton = new Button("Press me");

BorderPane.setAlignment(centeredText, Pos.CENTER);

root.setTop(centeredText);
root.setBottom(unorganizedButton);

その後、新しく作成したペインでコンストラクターを呼び出すだけです。

Scene scene = new Scene(root, 500, 500);

添加:

新しいペインを設定することもできます。

AnchorPane anchorPane = new AnchorPane();
root.setTop(anchorPane);
1
Yannick Rot