【问题标题】:Javafx disabled Node inherits DropShadow's colorJavafx disabled Node 继承 DropShadow 的颜色
【发布时间】:2016-08-31 22:43:41
【问题描述】:

如果用户输入了不正确的数据值,我已经创建了一个错误效果,我在 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,并且半径仅在动画期间发生变化。

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

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

【问题讨论】:

  • 我只是在评论而不是回答,因为我不知道原因(可能是错误?),但是将以下内容添加到您的 ErrorEffect 构造函数可以解决问题:radiusProperty().addListener((obs, oldVal, newVal) -> setColor(newVal.doubleValue() == 0d ? Color.TRANSPARENT : Color.RED));。它所做的只是简单地在半径达到零时将效果颜色设置为透明,否则颜色保持红色。你也可以对KeyFrames 做同样的事情,但我发现这个扩展非常简单。

标签: css javafx dropshadow


【解决方案1】:

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

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

针对类似不透明问题的谷歌搜索我遇到了这个答案,这是一个完全不同的问题,但我仍然尝试了该解决方案并且它有效: https://stackoverflow.com/a/35712919/2821023

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

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

textField.setOpacity(1);

编辑:

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

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

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

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

Attribute is redundant because it contains default value

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多