gpt4 book ai didi

css - 仅将 dropShadow 添加到网格 Pane JavaFx 2.2 的边框

转载 作者:技术小花猫 更新时间:2023-10-29 11:17:01 25 4
gpt4 key购买 nike

只想将阴影添加到网格 Pane 的边框而不是内部子元素

enter image description here这是显示效果的屏幕图像。

最佳答案

使用 StackPane 并将 GridPane 放入其中。

使用 CSS 设置 StackPane 的样式以应用背景颜色、插图和投影。

参见 Drop Shadow in an undecorated Pane! JAVAFX对于一些示例 CSS。

这是一个小型独立示例应用程序(在 OS X 10.9 上使用 Java 8b120),用于演示效果:

purple haze

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Shadowed extends Application {
public static void main(String[] args) { launch(args); }

@Override
public void start(Stage stage) throws Exception {
Label clear = new Label("Clear, with no shadow");
StackPane shadowedPane = new StackPane(clear);
shadowedPane.setStyle(
"-fx-background-color: palegreen; " +
"-fx-background-insets: 10; " +
"-fx-background-radius: 10; " +
"-fx-effect: dropshadow(three-pass-box, purple, 10, 0, 0, 0);"
);
shadowedPane.setPrefSize(200, 50);
stage.setScene(new Scene(shadowedPane));
stage.show();
}
}

解决其他问题

Is CSS the only option?

不,这可以通过使用 DropShadow 用代码而不是 CSS 来完成。效果。

shadowedPane.setEffect(new DropShadow(10, Color.PURPLE));

Why does it work?

因为设置背景可以为应用阴影效果的节点提供清晰的边缘。

Why does DropShadow work differently depending on if it's applied on a root node or a nested container?

在根节点或嵌套容器之间的阴影处理中没有真正不同的行为。投影效果取决于应用效果的元素是否具有透明(或空)背景。请注意,根节点通常会填满一个阶段。因此,如果根节点具有非透明背景色且未提供插图,则不会看到根节点上的阴影,因为它会落在舞台的可见区域之外。


我将猜测正在发生的事情。我认为投影效果所做的是计算节点的外部形状,然后对其应用阴影。当该节点具有背景颜色时,您将看到节点背景的阴影,这就是所提供图像中所见的。如果节点没有背景颜色,则节点的边缘是从子节点计算的,所以所有的子节点都有阴影。

现在发生的事情是,在提出问题时的 JavaFX 2.2 和 JavaFX 8 之间,JavaFX 的默认主题从里海转移到了摩德纳。默认情况下,里海 Pane 没有任何背景颜色。但是对于摩德纳,默认情况下 Pane 确实有轻微的灰白色背景。这意味着在 Java 8 中默认情况下不会出现原始海报在网格 Pane 内的模糊文本,因为 GridPane 将具有阴影背景,而不是内部文本被阴影。这可以通过运行以下程序并更改用于将样式表设置为 Caspian 的注释行来验证:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Shadowed extends Application {
public static void main(String[] args) { launch(args); }

@Override
public void start(Stage stage) throws Exception {
// setUserAgentStylesheet(STYLESHEET_CASPIAN);
Label clear = new Label("Clear, with no shadow");
GridPane shadowedPane = new GridPane();
shadowedPane.add(clear, 0, 0);
GridPane.setHalignment(clear, HPos.CENTER);
GridPane.setValignment(clear, VPos.CENTER);
GridPane.setHgrow(clear, Priority.ALWAYS);
GridPane.setVgrow(clear, Priority.ALWAYS);
shadowedPane.setStyle(
// "-fx-background-color: transparent; " +
// "-fx-background-color: palegreen; " +
"-fx-background-insets: 10; " +
"-fx-background-radius: 10; "
);
shadowedPane.setPrefSize(200, 50);
shadowedPane.setEffect(new DropShadow(10, Color.PURPLE));
stage.setScene(new Scene(shadowedPane));
stage.show();
}
}

关于css - 仅将 dropShadow 添加到网格 Pane JavaFx 2.2 的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com