2016-06-29 6 views
2

以下のプログラムは、私が実際に達成しようとしているものの例です。 enter image description hereJavaFXシーン内のコンテンツを透明にするにはどうすればよいですか?

私は、上記の画像をJavaFXで再作成しようとしています。しかし私は困難を抱えています。ステージのコンテンツを透明にすると、実際には透明にならず、まだ白のままです。

@Override 
public void start(Stage stage) {   
    try { 
     BorderPane root = new BorderPane(); 

     Scene scene = new Scene(root,400,400); 

     root.setStyle("-fx-background-color: rgba(0,0,0,0);"); 

     scene.setFill(Color.TRANSPARENT); 

     stage.setScene(scene); 
     stage.show(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

ステージはこのコードから表示されます。また、コンテンツを透明に設定し、ルートペインのデフォルトスタイルを透明に変更しました。

なぜこれが機能しないのか分かりません。コンテンツを透明に設定していますが、背景はまだ透明ではありません。

私が投稿したコードの結果は、透明ではないことがわかるので、これを示しています。

enter image description here

+0

あなたのシーンの親ノード(および関連するすべての子ノードが)透明だけでなく、舞台そのものであることを確認する必要があります。私の頭の上からステージでそれを行う方法がわからない。 – ManoDestra

+0

ステージが透明であれば、ステージを見ることはできません。ステージを動かすこともできません。 –

+0

イメージで達成しようとしているもの(ステージの背景を透明に設定する)が実際に可能であるかどうかは不明です。興味をそそる。それを見て:) – ManoDestra

答えて

3

この質問はほとんどの複製である:またStageStyle.TRANSPARENTでは不可能であるネイティブウィンドウの装飾を保持するために求めているということで違い

質問に記載されているサンプルウィンドウを詳しく見ると、装飾領域はわずかに異なります(たとえば、左上にステージアイコンが表示され、もう一方には表示されません)。私の推測では、質問に描かれた透明なウィンドウは実際にはOSのウィンドウ装飾を全く使用していないのですが、代わりにOSのウィンドウ装飾に似た独自の装飾をレンダリングしています。

とにかく、JavaFXと同様の効果を得るには、OSFウィンドウマネージャではなくウィンドウ装飾をレンダリングするためにJavaFXを使用する必要があります。これを行うには、次の質問を参照してください。

あなたがなることはありません。特に

がUndecoratorライブラリを見てみましょうウィンドウの装飾をOSのウィンドウマネージャの装飾と正確に一致させることができますが、異なって見え、同様の機能を提供するものを食べました。あなたが作業している場合、あなたの質問のウィンドウスクリーンショットに似た、OSウィンドウの装飾にきわめて近いものを達成することができるかもしれません。それが私だったら、Undecoratorが提供するデフォルトのルックに似た、ユーザーがまだきれいで簡単に理解できる別のルックに行きます。

ImageViewを作成して何らかのステージリスナーを使用すると、ステージを移動したときに画像ビューにアプリケーションの背後にある新しい画像が表示されることが考えられますか?あるいはそれはそれを過度に複雑にしていますか?

ImageViewのアプローチの背景キャプチャ妥当代替アプローチです。

あなたはImageViewのキャプチャ方法を使用したい場合は、以下の回答からいくつかのアイデアを使用することができます。ImageViewのキャプチャタイプの回答がウォンを超えるリンクされていること

  • JavaFX effect on background
    • ステージを動かしたり、ウィンドウの下のデスクトップやウィンドウを変更したりするときに、必要な効果を得るためには、さらにカスタム作業を行う必要があります。おそらく、あなたの目標を完全に実現するために、JavaFX以外のロジックに頼る必要があるかもしれません。それを行う方法についての議論は、私がここで議論する(またはできる)範囲外です。

      それはあなたが何で複雑なんだ

      、私は本当にundecoratorまたはImageViewのキャプチャアプローチ間の勧告を持っていません。あなたはJavaFXのミックスと/ AWTスウィング場合


      たぶん、あなたはJFXPanelとAWT PERPIXEL_TRANSPARENT機能を使用してこれを行うことができるかもしれません。私はこのコンボを試していませんが、How to Implement Per-Pixel Translucencyで説明されているように、AWTのピクセル単位の設定はthis oracle sampleに示されています。

    +0

    申し訳ありませんが、私のタイトルはちょっと誤解を招いていました。私は窓を気にしません。写真のようにシーンの内容を透明にしたいだけです。 –

    +1

    はい、私はそれを理解しています(少なくとも私はそう思います;-)、それが私が答えようとしたものです。おそらく私の答えは明らかではありませんでしたが、あなたはそれを直接行うことはできません。装飾なしでは透明な段階しかできません。透明性と装飾が必要な場合は、自分で装飾をレンダリングする必要があります。 – jewelsea

    +0

    これはImageViewを作成し、何らかのステージリスナーを使用することで取り除くことができると思いますか?ステージを移動すると、画像ビューにアプリケーションの背後にある新しい画像が表示されますか?あるいはそれはそれを過度に複雑にしていますか? –

    関連する問題