web-dev-qa-db-ja.com

javafxで透明なシーンとステージを作成する方法

不明確な透明な進行標識が欲しいのですが。

ここにコードがあります、それは灰色の背景の状態/シーンを示しています。完全に透明にしたかった。

以下のコードを試してみましたが、透明ではない背景のステージが表示されます。

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.VBox;
import javafx.scene.Paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

    public class Main extends Application {

        @Override
        public void start(Stage stage) {
            /*
             * 
             * my css file content:
             * 
             * .progress-indicator .indicator { -fx-background-color: transparent;
             * -fx-background-insets: 0; -fx-background-radius: 0;
             * 
             * } .progress-indicator { -fx-progress-color: green ; }
             * 
             * 
             * 
             */
            Stage initStage = new Stage();

            initStage.initStyle(StageStyle.TRANSPARENT);
            ProgressIndicator loadProgress = new ProgressIndicator();
            loadProgress.setSkin(null);
            loadProgress.setPrefWidth(50);
            VBox box = new VBox();
            box.getChildren().add(loadProgress);
            final Scene scene = new Scene(box, 150, 150);

            scene.setFill(Color.TRANSPARENT);

            initStage.setScene(scene);
            scene.getStylesheets().add("application.css");

            initStage.show();

        }

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

    }

output

10
javafan

ために modena.css(Java 8)のデフォルトのJavaFXルックアンドフィールの定義)、すべてのコントロール(およびコントロールがロードされている場合はペイン)にわずかに網掛けされた背景が導入されました。

これを削除するには、デフォルトの背景を透明に指定します。これを行うには、次の行をアプリケーションのCSSファイルに追加します。

.root { -fx-background-color: transparent; }

これは、ステージのスタイルとシーンの背景の塗りつぶしを初期化するためにコードに既に設定されている他の設定に追加されます。

stage.initStyle(StageStyle.TRANSPARENT);
scene.setFill(Color.TRANSPARENT);

注:質問のサンプルコードでは、startメソッドに渡されたステージを使用する代わりに、追加のステージ(initStage)が作成されます。渡されたステージは、追加のinitStageを作成するのではなく、コードによって直接初期化、利用、および表示できます。

24
jewelsea

stage.initStyle(StageStyle.TRANSPARENT);
これは、トップバーを非表示にするためです(最小化、元に戻す、閉じる)

scene.setFill(Color.TRANSPARENT);
これはフレームの色用です(TRANSPARENTを任意の色のGREEN YELLOW RED BLUEに置き換えることができます...)
私にとっては、あなたが私を理解できるのであれば、ガラス越しに見たいです。
色違い
ソリューションは

 primaryStage.setOpacity(0.2);


数値0.2は0と1の間です
0は非表示、1は通常の形式ですが、数字の間は透明です
番号を選択してプログラムを実行し、これが必要なものかどうかを確認してください
フルスクリーン用のこのコードがあります

 primaryStage.setFullScreen(true);<br>

そしてCSSファイルでこれを行います

.root { -fx-background-color:rgba(0,0,0,1); }<br>

rgba(0,0,0,1)の番号を変更して色を変更できます

6
Sona

これでうまくいきます。

Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));
Scene scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
stage.setScene(scene);
stage.initStyle(StageStyle.TRANSPARENT);
stage.show();

Uは主に2つのものが必要です:

scene.setFill(Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
1
Abdul.Moqueet