JavFXで半透明のウィンドウを表示する


JavaFXでこんな感じの半透明ウィンドウを表示する方法です。

public void test() {
    Stage primaryStage = new Stage(StageStyle.TRANSPARENT);
    StackPane root = new StackPane();
    Scene scene = new Scene(root, 300, 250);
    scene.setFill(null);

    Button btn = new Button();
    btn.setText("Say 'Hello World'");
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Hello World!");
        }
    });

    BorderPane borderPane = new BorderPane();
    borderPane.setStyle("-fx-background-radius: 10;-fx-background-color: rgba(0,0,0,0.3);");
    borderPane.setCenter(btn);
        
    root.getChildren().add(borderPane);
        
    primaryStage.setScene(scene);
    primaryStage.show();

}

重要なのはこの3箇所です。

Stage primaryStage = new Stage(StageStyle.TRANSPARENT);
scene.setFill(null);
borderPane.setStyle("-fx-background-radius: 10;-fx-background-color: rgba(0,0,0,0.3);");

まずはStage のコンストラクタで StageStyle に TRANSPARENT を指定してウィンドウ自体を透明にします。
次に、scene に対しては setFill() で null を指定して、こちらも透明にします。
最後に、 borderPane に対してはスタイルシートで背景色のアルファ値に 1 以下の値(この例では 0.3 )を指定することで
borderPane が透けて見えるようになります。