2016-03-29 114 views
2

我想做一個透明的場景和舞臺上的按鈕,但它似乎只適用於文本。 這裏是我的簡單的代碼透明的場景和舞臺不與javafx中的按鈕一起工作

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 
public class TransparentStage extends Application { 

@Override 
public void start(Stage stage) { 
    stage.initStyle(StageStyle.TRANSPARENT); 
    Text text = new Text("Transparent!"); 
    text.setFont(new Font(40)); 
    //Button button = new Button("btn"); 
    VBox box = new VBox(); 
    box.getChildren().add(text); 
    //box.getChildren().add(button); 
    final Scene scene = new Scene(box,300, 300); 
    scene.setFill(Color.TRANSPARENT); 
    stage.setScene(scene); 
    stage.show(); 
} 

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

the result

,但如果我取消按鈕,結果將是here

它劑量不看任何透明以上,但它只是爲基底的。 透明是不是與按鈕一起工作? 和如果我應該添加一個按鈕呢? 謝謝。

回答

2

這是怎麼回事

文本不是控制。一個簡單的只使用Text的JavaFX程序不會加載任何控件。要使用控件,JavaFX需要加載默認的CSS樣式表(在Java 8中,這稱爲modena.css)。默認的CSS樣式表將爲佈局窗格設置背景顏色,例如您在示例中使用的VBox。

如何修復

爲了防止背景顏色佈局窗格,你需要它的背景色設置爲null:

box.setStyle("-fx-background-color: null;"); 

但是,爲什麼?

現在,我知道這很奇怪。 。 。但它是如何。如果不使用控件,佈局窗格沒有背景顏色,因爲CSS未加載並應用於場景圖(可能出於性能原因)。如果您使用控件,則加載CSS並且佈局窗格具有背景顏色。

在modena.css,在.root節本的定義是:

/* A very light grey used for the background of windows. See also 
* -fx-text-background-color, which should be used as the -fx-text-fill 
* value for text painted on top of backgrounds colored with -fx-background. 
*/ 
-fx-background: derive(-fx-base,26.4%); 

/* A light grey that is the base color for objects. Instead of using 
* -fx-base directly, the sections in this file will typically use -fx-color. 
*/ 
-fx-base: #ececec; 

/*************************************************************************** 
*                   * 
* Set the default background color for the scene       * 
*                   * 
**************************************************************************/ 

-fx-background-color: -fx-background; 
+0

真棒謝謝.. –