2016-06-13 12 views
0

ここでは、矩形の束のScrollPaneで透明にするステージを生成するメソッドがあります。トランスペアレントな透明なステージScrollPaneが透明でない

private Stage createStage() 
    { 
     Stage stage = new Stage(StageStyle.TRANSPARENT); 

     FlowPane flw = new FlowPane(); 
     flw.setBackground(Background.EMPTY); 

     Random gen = new Random(5); 
     for (int i = 0; i < 50; i++) 
     { 
      int size = 50 + gen.nextInt(50); 
      flw.getChildren().add(new Rectangle(size, size, Color.web("rgb(" + gen.nextInt(255) + "," + gen.nextInt(255) + "," + gen.nextInt(255) + ")"))); 
     } 

     ScrollPane root = new ScrollPane(flw); 
     root.setMaxSize(500, 500); 
     root.setBackground(Background.EMPTY); 

     Scene scene = new Scene(root, Color.TRANSPARENT); 
     stage.setScene(scene); 

     return stage; 
    } 

これはStage.show()が呼び出されたときに上記のコードの出力です:

enter image description here

このステージは新しいウィンドウでポップアップしますが、あなたが見るように、背景が白であります見ることができません。 StageStyle.TRANSPARENTと1つのSquareだけで白い背景なしに四角形のポップアップが作成されたので、私はScrollPaneまたはFlowPaneに問題があると感じました。

私は間違っていますか?私はすでにやってみました:

Pane.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));

答えて

1

それはあなたのScrollPaneが透明な背景を受けていないのビューポートに起因するのです

次のCSS適用する場合は、次の上の

.scroll-pane > .viewport { 
    -fx-background-color: transparent; 
} 

をあなたが提供したコードは、以下のようになります:


あなたは、プロジェクトやシーンにスタイルシートを追加する必要があります。

例:スタイルシートは、srcディレクトリ

scene.getStylesheets().add("stylesheet.css"); 

であれば私はCSSのディレクトリを追加することを好みます後に、より具体的なスタイルシートを可能に:

scene.getStylesheets().add("CSS/stylesheet.css"); 

あなたはjarファイルから起動している場合、あなたはを使用する必要がありますことを忘れないでください。 A)これを行う:

スタイルシートを追加すると、あなたは

+0

のいずれかにどのように任意のアイデアを読みやすいコードを作るべきではなく、CSSでそれらを実装することで、スタイリングのために使用されるコードの一部のJavaラインを減らすことができますCSSやBを使わないで) 'myScrollpane.setStyle(StringHere);'のようにします。 – Hatefiend

+0

さて、私はそのフォーマットを行うことを認め、CSSファイルを作成しました。助けてくれてありがとう。あなたが他の可能な方法で詳述できるなら、私は非常に感謝します。 – Hatefiend

+0

[これ](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#lookup-java.lang.String-)を読むことができます。これは代替ですしかし、私はCSSがこれをうまく処理するときにはお勧めしません – Peter