首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javafx中制作透明的场景和舞台?

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

Stack Overflow用户
提问于 2015-12-02 08:58:43
回答 3查看 25K关注 0票数 11

我想要一个透明的进度指示器,它是不确定的。

这是代码,它显示了灰色背景状态/场景。我想要完全透明的。

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

代码语言:javascript
复制
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);
        }

    }

EN

回答 3

Stack Overflow用户

发布于 2015-12-02 09:17:02

对于modena.css (Java8中默认的JavaFX外观定义),为所有控件引入了略带阴影的背景(如果加载了控件,还会引入窗格)。

您可以通过指定默认背景为透明来删除此选项。这可以通过将以下行添加到应用程序的CSS文件中来完成:

代码语言:javascript
复制
.root { -fx-background-color: transparent; }

这是对代码中已有的用于初始化舞台样式和场景背景填充的其它设置的补充。

代码语言:javascript
复制
stage.initStyle(StageStyle.TRANSPARENT);
scene.setFill(Color.TRANSPARENT);

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

票数 27
EN

Stack Overflow用户

发布于 2017-03-25 00:57:19

代码语言:javascript
复制
stage.initStyle(StageStyle.TRANSPARENT);

这是为了隐藏顶栏(最小化、向下恢复和关闭)

代码语言:javascript
复制
scene.setFill(Color.TRANSPARENT);

这是框架颜色(您可以将透明替换为任何颜色绿色、黄色、红色、蓝色……)但对于我来说,如果你能理解我,我想要玻璃视图,并且有不同的颜色,所以解决方案是

代码语言:javascript
复制
primaryStage.setOpacity(0.2);

数字0.2在0和1之间。0是隐藏的,1是标准形式,但在数字之间是透明的,所以选择你的数字并运行你的程序,看看这是不是你想要的,这是全屏代码。

代码语言:javascript
复制
primaryStage.setFullScreen(true);

并在css文件中执行此操作

代码语言:javascript
复制
.root { -fx-background-color:rgba(0,0,0,1); }

你可以在rgba(0,0,0,1)中通过更改数字改变颜色

票数 9
EN

Stack Overflow用户

发布于 2019-08-13 21:07:53

这对我很有效。

代码语言:javascript
复制
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主要需要两样东西:

代码语言:javascript
复制
scene.setFill(Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34033119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档