css - Javafx禁用Node继承DropShadow的颜色

标签 css javafx dropshadow

我创建了一个错误效果,如果用户输入了错误的数据值,我会在 TextFields 上设置它并为其设置动画。

public class ErrorEffect extends DropShadow {

    private Timeline animation = new Timeline();

    public ErrorEffect() {
        setOffsetX(0);
        setOffsetY(0);
        setRadius(0);
        setColor(Color.RED);

        animation.getKeyFrames().addAll(
                new KeyFrame(Duration.ZERO, new KeyValue(radiusProperty(), 0)),
                new KeyFrame(new Duration(150), new KeyValue(radiusProperty(), 20)),
                new KeyFrame(new Duration(500), new KeyValue(radiusProperty(), 0)));
    }

    public Timeline getAnimation() {
        return animation;
    }
}

我的问题是每当禁用 TextField 时,它都会显示 DropShadow 的颜色。通常红色是看不到的,因为它的半径设置为 0,并且半径仅在动画期间发生变化。

enter image description here

如果我使用像 InnerShadow 这样的不同效果,则不会发生这种情况,禁用的 TextFields 具有默认颜色并且不继承 InnerShadows 颜色。

我想使用 DropShadow 来完成这项工作,但我不明白为什么会发生这种情况,但使用 InnerShaddow 却不会发生。

最佳答案

我试过 DVarga 的解决方案,但我得到了奇怪的结果。

enter image description here

我意识到这不是颜色问题,而是不透明度问题。

Googlin for similar opacity issues 我遇到了这个答案,这是一个完全不同的问题,但我仍然尝试了解决方案并且它有效: https://stackoverflow.com/a/35712919/2821023

似乎这是一个错误,不透明度被应用了两次。它已经被报道过,所以有可能有一天它会被修复。答案还解释了为什么 ScrollPane 中禁用的组件要轻得多,请参见上图。 javafx 中的禁用组件似乎存在很多问题...

因此,我通过在我的 TextFields 上将不透明度设置为 1 解决了我的问题。

textField.setOpacity(1);

编辑:

好吧,我认为这是初始化的问题,所以在组件初始化后设置不透明度解决了它。

但是我尝试通过 fxml 设置不透明度:

<TextField fx:id="groupTextField" promptText="Group" opacity="1" />

它仍然有效,我什至收到一条警告:

Attribute is redundant because it contains default value

谁能解释一下这是怎么回事?如何在其当前拥有的组件上设置相同的不透明度值可以解决任何问题?

关于css - Javafx禁用Node继承DropShadow的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260136/

相关文章:

jquery - 使用 jquery .css 的 div 的响应高度

javascript - 如何删除 div 但防止滚动位置被更改?

带有自定义对象的 javafx CheckListView 以显示特定属性

jquery - CSS 透明长阴影

javascript - 为什么 polymer 预处理是我的 CSS?

javascript - 带点击灰色背景的模态对话框

java - 如何在 JavaFX ChoiceBox 中显示默认选择

JavaFx 菜单项加速器 Javafx css

c# - 如何在弹出窗口周围添加阴影

c# - 带图像模糊 UWP 的投影