JavaFX 未修饰的带有阴影的窗口

问题描述 投票:0回答:2

我试图弄清楚如何创建一个具有常规阴影行为的未修饰窗口(就像使用 Windows 时的所有窗口一样)。

我读了几篇文章,但没有一篇真正有效。

据我了解,我必须用某种填充来创建主舞台。这个阶段必须有透明的背景。实际内容需要放置在某种其他节点上。

所以我为我的根元素选择了一个堆栈窗格,并在上面放置了一个 vbox。 vbox 应该在实际的主舞台区域旁边(我将该区域涂成绿色)。

但是我尝试使用 StageStyle 透明,我尝试用透明背景填充堆栈窗格,但没有一个起作用。此外,阴影无法按预期工作(我在示例中删除了阴影实验)。

private void createPopup2() {
        StackPane stackePane = new StackPane();
        VBox rootPane = new VBox();
        rootPane.setStyle("-fx-background-color: green; -fx-border-color: black; -fx-border-width: 1px;");
        stackePane.getChildren().add(rootPane);
        stackePane.setPadding(new Insets(20, 20, 20, 20));
        Scene scene = new Scene(stackePane);
        final Stage stage = new Stage();
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setWidth(600);
        stage.setHeight(350);
        stage.setScene(scene);
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.show();
    }

我很困惑,不知道如何解决这个问题。

javafx
2个回答
1
投票

首先我不确定您期望什么类型的阴影。如果您能提供您尝试过的阴影示例,将会很有帮助,以便我们了解实际问题。

话虽如此,您是否厌倦了在 VBox 上使用 -fx-effect?下面的代码在绿色框周围创建阴影效果。

StackPane stackePane = new StackPane();
stackePane.setStyle("-fx-background-color:transparent");
VBox rootPane = new VBox();
rootPane.setStyle("-fx-background-color: green; -fx-border-color: black; -fx-border-width: 1px;-fx-effect: dropshadow(gaussian, rgba(0, 0, 0, .75), 20, 0.19, 0, 0);");
stackePane.getChildren().add(rootPane);
stackePane.setPadding(new Insets(20, 20, 20, 20));
Scene scene = new Scene(stackePane, Color.TRANSPARENT);
final Stage stg = new Stage();
stg.initStyle(StageStyle.TRANSPARENT);
stg.setWidth(600);
stg.setHeight(350);
stg.setScene(scene);
stg.initModality(Modality.APPLICATION_MODAL);
stg.show();

您可以调整投影的参数以获得您想要的效果。 参数相关的文档如下:


0
投票

Sai Dandem 的答案很有用,但在这种情况下,由于填充,窗口最大化无法覆盖屏幕

© www.soinside.com 2019 - 2024. All rights reserved.