【发布时间】: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