我创建了一个错误效果,如果用户输入的数据值不正确,我会在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来完成这项工作,但我无法理解为什么会发生这种情况,但InnerShaddow不会发生这种情况。
答案 0 :(得分:0)
我尝试过DVarga的解决方案,但结果很奇怪。
我意识到这不是一个颜色问题,而是一个不透明的问题。
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
任何人都可以解释这里发生了什么吗?如何在当前组件上设置相同的不透明度值可以解决任何问题?