web-dev-qa-db-ja.com

ボタン(または任意のGUI要素)をJavaFXシーンに配置する方法

UIの特定の場所(特定の座標)にJavaFXボタンを配置しようとしていますが、何も機能しません。これに使用される方法があると思いますが、それを見つけることができません。

13

ペインを使用できます。 setLayoutX()およびsetLayoutY()。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;

public class Tester extends Application {


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

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World!");
    Button btn = new Button();
    btn.setText("'Hello World'");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("Hello World!");
        }
    });

    Pane root = new Pane();
    btn.setLayoutX(250);
    btn.setLayoutY(220);
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
}
}
23
Vinod CG

layoutXおよびlayoutY

<Button text="Button" layoutX="50" layoutY="100" />

FXMLでは、 layoutX および layoutYjavafx.scene.Node から継承されるプロパティを使用できます。

JavaFX Documentation によると:

layoutX

レイアウトのためにこのノードの変換に追加される変換のx座標を定義します。

layoutY

レイアウトのためにこのノードの変換に追加される移動のy座標を定義します。

以下の例では、 Button 要素が50のx座標と100のy座標で配置されたウィンドウが表示されます。

sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.Scene?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.control.Button?>

<Scene>
  <Pane prefWidth="300" prefHeight="300">
    <!-- Button Positioned Using layoutX and layoutY -->
    <Button text="Button" layoutX="50" layoutY="100" />
  </Pane>
</Scene>

Main.Java

package sample;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.fxml.FXMLLoader;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) throws Exception {
    Scene scene = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Window Title");
    primaryStage.setScene(scene);
    primaryStage.show();
  }

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

注:setLayoutX()setLayoutY() も使用できます layoutX および layoutY プロパティの値を、マークアップを介さずにコントローラーで動的に設定するメソッド。さらに、UI要素タグ内で layoutX および layoutY タグ(つまり、<layoutX>および<layoutY>)を使用して、x座標と属性を使用する代わりに、FXMLマークアップ内のy座標。

1
Grant Miller