Javafx禁用Node继承DropShadow的颜色

时间:2016-08-31 22:43:41

标签: 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不会发生这种情况。

1 个答案:

答案 0 :(得分:0)

我尝试过DVarga的解决方案,但结果很奇怪。

enter image description here

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

Googlin有类似的不透明度问题我遇到了这个答案,这是一个完全不同的问题,但我仍然尝试了解决方案并且它有效: 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

任何人都可以解释这里发生了什么吗?如何在当前组件上设置相同的不透明度值可以解决任何问题?