webdevqa.jp.net

JavaFXで透明な背景のスプラッシュスクリーンを作成する方法

私が提供した例のようなスプラッシュスクリーンを作成しようとしています。 AnchorPaneは透明な背景を許可していないようです。AnchorPaneのc​​ssを-fx-background-color: rgba(255,0,255,0.1) ;に設定しようとしましたが、白い背景がまだ表示されます。

私のfxmlファイルにあるのは、PNG画像を含むImageViewを含むAnchorPaneだけです。

Example

私は至る所を調べましたが、解決策を見つけることができません。どんな助けもいただければ幸いです。ありがとう

23
francisOpt

これを試してください JavaFXスプラッシュサンプル Stackoverflowの質問用に作成: Designing a splash screen(Java) 。また、アプリケーションの初期化進行状況のフィードバックを提供する フォローアップサンプル

JavaFXは、スプラッシュからアプリケーションへのスムーズな転送のために Preloader インターフェースを提供していますが、上記のサンプルではそれを利用していません。

上記のスプラッシュサンプルでも透過的な効果はありませんが、これは ダイアログサンプル がその方法を示しており、前のスプラッシュサンプルと組み合わせて目的の効果を得ることができます。

透明効果は以下によって作成されます:

  1. stage.initStyle(StageStyle.TRANSPARENT)
  2. scene.setFill(Color.TRANSPARENT)
  3. ルートノードが不透明な正方形の長方形でないことを確認します。

これはすべてSergeyのサンプルで示されています。

関連する質問:

追加の質問に基づいて2016年4月に更新します

プリローダーイメージはフォアグラウンドにありません。私はstage.toFront()を試しましたが、助けにはなりません。

Java 8u20 stage.setAlwaysOnTop(true) に新しいAPIが作成されました リンクされたサンプル を更新して、これを最初のスプラッシュで使用しました画面。メイン画面へのスムーズな移行に役立ちます。

Java8 +の場合

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

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

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

必要に応じて、CSSスタイルのクラスとルールまたはsetStyle呼び出し(Sergeyの回答で示されている)を使用して、設定がすべてのアプリ画面ではなくスプラッシュ画面のルートにのみ適用されるようにすることができます。

関連を参照してください:

24
jewelsea

そのためには、透過的なStageSceneが必要です。 Pane自体には色がありません。

public void start(Stage primaryStage) {
    Button btn = new Button("Say 'Hello World'");

    AnchorPane root = new AnchorPane();
    root.getChildren().add(btn);

    // Java 8: requires setting the layout pane background style to transparent
    // https://bugs.openjdk.Java.net/browse/JDK-8092764
    // "Modena uses a non-transparent background by default"
    root.setStyle("-fx-background-color: transparent;"); 

    Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.setScene(scene);
    primaryStage.show();
}
14
Sergey Grinev