JAVAFX还有哪些方法可以使标签闪烁,而不是使用时间线?

时间:2017-02-28 02:51:41

标签: java javafx label timeline blink

除了使用计时器之外,如何在自定义标签上创建闪烁效果?

这是我正在使用的一个可行的例子......

自定义标签类

public class CustomLabel extends Label{

   public CustomLabel(String text1){
      super(text1);
      setAlignment(Pos.CENTER);

      //for blinking effect
        TIMER = new Timeline(
            new KeyFrame(Duration.seconds(1),ae->ChangeColor1()),
            new KeyFrame(Duration.seconds(2),ae->ChangeColor2())
        );
        TIMER.setCycleCount(Animation.INDEFINITE);
        TIMER.play();
    }

    public void ChangeColor1(){
        setTextFill(Color.Pink);    
    }

    public void ChangeColor2(){
        setTextFill(Color.Blue);    
    }

}

主要课程

StackPane sp = new StackPane(new CustomLabel("Testing"));
Scene sc = new Scene(sp)
primaryStage.setScene(sc)
sc.show();

有没有办法让这种方法"更轻"?

不知何故,此方法会在应用程序运行1天后导致错误

java.lang.NullPointerException
Exception in thread "JavaFX Application Thread" java.lang.OutOfMemoryError: Java heap space

有关如何解决这个问题的任何建议吗?此应用程序必须运行超过1整天。

1 个答案:

答案 0 :(得分:1)

回复你的上述答案,(因为评论不允许使用代码块)这就是你需要这样做的方式,因为它能够"闪烁":

KeyFrame kfP = new KeyFrame(Duration.seconds(1), new KeyValue(ae.textFillProperty(), Color.PINK));
Timeline TIMER = new Timeline();
TIMER.getKeyFrames().add(kfP);
TIMER.setCycleCount(Animation.INDEFINITE);
TIMER.setAutoReverse(true);
TIMER.play();   

这样做的原因是你只创建一个关键帧,它只使用一个关键帧,这会阻止时间线创建多个新关键帧,就像在初始代码中一样,并且时间轴继续运行它不会收集垃圾,直到你的内存不足为止。