JavaFx 透明舞台和静态绘制

标签 java javafx

我正在尝试制作一个透明的窗口,但我仍然可以在上面绘图,并且绘图不透明。如果我在舞台上设置不透明度,一切都会变得透明。我也尝试过为小组增加透明度,但这似乎并没有改变任何事情。我怎样才能做到这一点?

        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        DisplayMode displayMode = gd.getDisplayMode();

        Canvas canvas = new Canvas(displayMode.getWidth(), displayMode.getHeight());
        GraphicsContext gc = canvas.getGraphicsContext2D();

        Group group = new Group();
        group.getChildren().add(canvas);

        Scene secondScene = new Scene(group, displayMode.getWidth(), displayMode.getHeight());
        gc.setFill(Color.rgb(0, 0, 0, .5));
        gc.fillRect(0, 0, 100, 100);

        // New window (Stage)
        Stage newWindow = new Stage(StageStyle.UNDECORATED);
        newWindow.setOpacity(.02);
        newWindow.setTitle("Second Stage");
        newWindow.setScene(secondScene);

        // Set position of second window, related to primary window.
        newWindow.setX(0);
        newWindow.setY(0);
        //newWindow.setWidth(displayMode.getWidth());
        //newWindow.setHeight(displayMode.getHeight());

        newWindow.show();

最佳答案

所以,基于how to make transparent scene and stage in javafx? ,我更新了您的代码,添加

secondScene.setFill(Color.TRANSPARENT);

newWindow.initStyle(StageStyle.TRANSPARENT);

并且能够生产...

Example...

import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) {
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        DisplayMode displayMode = gd.getDisplayMode();

        Canvas canvas = new Canvas(displayMode.getWidth(), displayMode.getHeight());
        GraphicsContext gc = canvas.getGraphicsContext2D();

        Group group = new Group();
        group.getChildren().add(canvas);

        Scene secondScene = new Scene(group, displayMode.getWidth(), displayMode.getHeight());
        secondScene.setFill(Color.TRANSPARENT);         gc.setFill(Color.rgb(0, 0, 0, .5));
        gc.fillRect(0, 0, 100, 100);

        // New window (Stage)
        Stage newWindow = new Stage(StageStyle.UNDECORATED);
        newWindow.initStyle(StageStyle.TRANSPARENT);

        newWindow.setTitle("Second Stage");
        newWindow.setScene(secondScene);

        // Set position of second window, related to primary window.
        newWindow.setX(0);
        newWindow.setY(0);
//      newWindow.setWidth(200);
//      newWindow.setHeight(200);

        newWindow.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

请记住,在处理此类事情时,您需要确保层次结构中的每一层也是透明的

关于JavaFx 透明舞台和静态绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219210/

相关文章:

JavaFX:从选项卡 Controller 添加新选项卡

java - Foo 的实现类可以称为 Foo 的扩展类吗?

java - Android 判断是否有来自常用联系人的来电

java - 时区之间的转换给出了不正确的结果

java - 如何将 2D 网格缩放到 Canvas 的大小?

canvas - 绘制后javafx FXML Canvas为空

java - 如何限制Firestore中添加和删除监听器的数量?

java - 休息| MIME 类型 : acceptance order

java - 如何使用JRE部署JavaFX 11 Desktop应用程序

仅 JavaFX TextField 焦点状态可通过 css 更改