我已经创建了一个错误效果,如果用户输入了不正确的数据值,我会在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中却不会发生。
发布于 2016-09-01 09:56:56
我尝试过DVarga的解决方案,但我得到了奇怪的结果。

我意识到这不是一个颜色问题,而是一个不透明的问题。
对于类似的不透明性问题,我遇到了一个完全不同的问题,但我仍然尝试了这个解决方案,它起了作用: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有人能解释一下这是怎么回事吗?如何在它当前拥有的组件上设置相同的不透明度值可以解决任何问题?
https://stackoverflow.com/questions/39260136
复制相似问题