如何在javafx中制作透明场景和舞台?

时间:2015-12-02 00:58:43

标签: javafx transparent scene stage

我希望透明的progressindicator,这是无限期的。

这里是代码,它显示灰色背景状态/场景。 我希望完全透明。

我尝试了以下代码,但它显示了不透明的后台阶段。

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

3 个答案:

答案 0 :(得分:19)

对于modena.css(Java 8中的默认JavaFX外观定义),为所有控件(以及加载控件时的窗格)引入了轻微的阴影背景。

您可以通过指定默认背景是透明的来删除它。这可以通过在应用程序的CSS文件中添加以下行来完成:

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

这是您在代码中已有的其他设置,以初始化舞台的样式和场景的背景填充。

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

注意:在问题的示例代码中,创建了一个附加阶段(initStage),而不是使用start方法的传入阶段。传入的阶段可以通过代码直接初始化,使用和显示,而不是创建额外的initStage。

答案 1 :(得分:3)

stage.initStyle(StageStyle.TRANSPARENT);
这是隐藏顶部栏(最小化,恢复和关闭)

scene.setFill(Color.TRANSPARENT);
这是用于框架颜色(你可以用任何颜色的GREEN YELLOW RED BLUE替换TRANSPARENT ......)
但对我来说,如果你能理解我,我想要玻璃观察,
和不同的颜色
所以解决方案是

 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)

中的数字

答案 2 :(得分:1)

这对我有用。

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仅需要两件事:

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