JavaFX如何跳转到相邻的时间轴?

时间:2017-05-23 13:15:42

标签: java javafx

Timelines是一个初始化为

的集合
List<Timeline> timelines = new ArrayList<>(); 

每个timelinetimelines的元素)的值是一条简短的推文。关于每个timeline的结构的摘要,请注意每个timelineKeyFrame

// offset is adjusted according to msg length
Text tweet = new Text(offset, displayHeight - 15, tweetBody);

// set timeline
Timeline ti= new Timeline();
ti.setCycleCount(1);
ti.setAutoReverse(false);
// stop at a place where users cannot see
KeyValue kv = new KeyValue(tweet.xProperty(),-10 - mesLength); 
// playtime is defined according to msg length
KeyFrame kf = new KeyFrame(Duration.millis(playtime), kv); 
tl.getKeyFrames().add(kf);
timelines.add(ti);

总的来说我们有10条推文。迭代地构建上述10个时间轴,用适当的X位置(即tweet1:偏移800,tweet2:偏移1800,tweet3:偏移2500等)和持续时间链接它们,同时运行所有时间线。也就是说,所有推文都是在视图之外初始化的。

例如,在此图片中,您已将所有推文初始化,但它们已不在视野范围内。enter image description here

点击Run enter image description here

消息开始enter image description here

第一条消息结束第二条消息开始enter image description here

我在玩什么:

timelines.forEach(Animation::play)

如何使用timelinesNext menuItem切换到Previous中的相邻推文。

MenuItem nextControl = new MenuItem("Next");
fasterControl.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        // I want to use jumpTo but didn't figure it out
        // timelines.forEach(timeline -> timeline.jumpTo(Duration.));
    }
});

一个额外的问题,一旦推文开始运行,如何将窗口重置为空。enter image description here

如果需要澄清和/或代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

你所做的只是改变一个属性。保存列表,

 List<Text> tweets = new ArrayList<>();

然后有一个表示当前文本的字段/变量。

 Text current;

没有处理,你找到你当前的索引,并抓住它的时间轴。

 public void handle(ActionEvent event) {

      if(current!=null){
          TimeLine tl = timeLines.get(0);
          current = tweets.get(0);

          tl.stop();
          tl.getKeyFrames().clear();
          //set the display values eg the x value to zero.
          tl.play();

      } else{
          int index = tweets.indexOf(current);
          TimeLine oldLine = timeLines.get(index);
          //stop the timeline, clear the old keyframes.
          //create a new keyvalue, keyframe that hides this text, and play the timeline.

          index = (index+1)%tweets.size();
          TimeLine line = timeLines.get(index);
          current = tweets.get(index);
          //create a new keyvale/keyframe that shows this text, and play the time line.
      }
}