8

Scene が最初に FXML からロードされたときに、Java コードで Scene に新しいノードを追加するにはどうすればよいですか? 以下に示すように、FXMLからロードしました

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE);

たとえば、Java コードでシーンにボタンを追加するにはどうすればよいでしょうか。

4

2 に答える 2

12

あなたの質問の背後にある理由はわかりません。アプリケーションまたはシーンの初期化中にいくつかのノードを動的に挿入したい場合は、コントローラーでinitializeメソッドを使用することをお勧めします。

このメソッド@FXMLには、次の署名が付けられている必要があります。

void initialize()

次に、コントローラーのボタンを挿入する必要があるコンテナーを挿入し、それにボタンを追加できます。

@FXML
HBox buttonBox // assuming your button container is a HBox
...

@FXML
protected void initialize() {
    buttonBox.getChildren().add(new Button("Click me!"));
}

このメソッドinitializeは、FXML ファイルで定義されたコンポーネントがビルドされた後に呼び出されます。

于 2013-08-09T19:11:31.020 に答える
8

これを行う 1 つの方法を次に示します。

((VBox) root).getChildren().add(new Button("Java Button"));

上記のスニペットは、FXML で定義されたトップ コンテナが VBox であると想定しています。VBox でない場合は、選択したタイプにキャストするだけです。

実行時にコンテナーのタイプをどのように判別できるのでしょうか。より一般的なコードを作成できます。

タイプはおそらくPaneであるため、ほとんどの場合、 Pane へのキャストは機能します。通常、レイアウト ペインを親として使用することは、JavaFX のほとんどのレイアウト タスクで推奨されます。

于 2013-08-09T18:38:09.060 に答える