2016-08-31 3 views
0

사용자가 잘못된 데이터 값을 입력하면 TextFields에 설정하고 애니메이션 효과를 적용하여 오류 효과를 만들었습니다.Javafx 사용 안함 Node가 DropShadow의 색을 상속받습니다.

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 같은 다른 효과를 사용하는 경우

enter image description here

, 장애인 TextField의 기본 색상을 가지고 InnerShadows 색상을 상속하지 않습니다.

이 작업을 DropShadow와 함께하고 싶지만이 문제가 왜 발생하는지 이해할 수는 없지만 InnerShaddow에서는 발생하지 않습니다.

+1

나는 그 이유를 알지 못하기 때문에 답변을하기보다는 코멘트를 달았지만, 다음과 같이'ErrorEffect' 생성자에 다음을 추가하면 문제가 해결됩니다 :'radiusProperty(). addListener ((obs, oldVal , newVal) -> setColor (newVal.doubleValue() == 0d? Color.TRANSPARENT : Color.RED));'. 단순히 반경이 0에 도달하자마자 효과 색상을 투명하게 설정하는 것입니다. 그렇지 않으면 색상이 빨간색으로 유지됩니다. 'KeyFrame's에서도 똑같이 할 수 있습니다 만,이 확장이 정말 간단하다는 것을 알았습니다. – DVarga

답변

0

나는 DVarga의 솔루션을 시도했지만 이상한 결과가 있습니다.

enter image description here

나는 색상 문제가되지 깨달았다 아니라 불투명도 하나.

Googlin 유사한 투명도 문제에 대해 나는이 대답은 아주 다른 문제를 건너 왔어요,하지만, 난 여전히 해결책을 시도하고 일 : 그것은 버그 및 불투명도가 두 번 적용됩니다 같은 https://stackoverflow.com/a/35712919/2821023

이 보인다. 그것은 이미보고되었으므로 언젠가는 고칠 수있는 가능성이 있습니다. 또한 그 대답은 ScrollPane의 비활성화 된 구성 요소가 왜 더 가벼운지를 설명합니다 (위 그림 참조). javafx에서 비활성화 된 구성 요소에 많은 문제가있는 것 같습니다.

그래서 내 TextField에서 불투명도를 1로 설정하여 문제를 해결했습니다.

textField.setOpacity(1); 

편집 :

좋아, 나는 그것을 해결 컴포넌트가 초기화 된 후 너무 투명도를 설정, 초기화 뭔가 생각했다.

그러나 나는 fxml을 통해 투명도를 설정하려 :

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

그리고 여전히 난라는 경고가 작품 :

Attribute is redundant because it contains default value 

사람이 여기에 무슨 일이야 설명 할 수 있습니까? 현재 가지고있는 컴포넌트에서 같은 불투명도 값을 설정하면 어떻게 되나요?