我试图实现一个自定义滑块,上面有一个矩形条,线条表示特定时间点的事件,如下图所示。它基本上是滑块上方的时间线,该事件被描述为垂直线。
该图显示了滑块的开始(t=0)和结束(t=x)之间的14条垂直线。每一行对应一个带有一些上下文信息的任意事件。
滑块将实时播放,即拇指将以实时速度沿着其轨道移动。当滑块超过事件的指定时间时,它将在文本区域中打印事件的上下文信息。使用该关系图,当前正在显示14秒的事件信息。
谢谢你。
您可以使用动画API中的时间线
来完成此操作。
简言之:
public class TimelineEvent {
private final Duration time ;
private final String info ;
public TimelineEvent(Duration time, String info) {
this.time = time ;
this.info = info ;
}
public Duration getTime() {
return time ;
}
public String getInfo() {
return info ;
}
}
int maxSeconds = ... ;
TimelineEvent[] events = ... ; // populate array of events...
Slider slider = new Slider(0, maxSeconds, 0);
TextArea textArea = new TextArea();
// ...
Timeline timeline = new Timeline();
for (TimelineEvent event : events) {
timeline.getKeyFrames().add(new KeyFrame(event.getTime(),
e -> textArea.setText(event.getInfo());
}
// make slider value change with timeline:
timeline.getKeyFrames().add(new KeyFrame(Duration.ZERO,
new KeyValue(slider.valueProperty(), 0)));
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(maxSeconds),
new KeyValue(slider.valueProperty(), maxSeconds)));
timeline.play();
如果用户“用手”移动滑块(以及对其进行动画),另一种可能更方便的选择是使用动画来移动滑块,然后在滑块的值上使用监听器或绑定:
int maxSeconds = ... ;
Slider slider = new Slider(0, maxSeconds, 0);
TextArea textArea = new TextArea();
Timeline timeline = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(slider.valueProperty(),0)),
new KeyFrame(Duration.seconds(maxSeconds), new KeyValue(slider.valueProperty(),maxSeconds)));
textArea.textProperty().bind(Bindings.createStringBinding(
() -> findInfoForTimepoint(slider.getValue()),
slider.valueProperty()));
private String findInfoForTimepoint(double seconds) {
// figure and return correct "info" for given time in seconds...
}
你可以通过剪辑AnimationClip、操作AnimationAction、混合器AnimationMixer完成一些播放效果。 播放/暂停(.paused属性) <button onclick="pause()" type="button" style="position: absolute;padding: 10px;">暂停/继续</button> <script> // 暂停继续播放
问题内容: TL; DR我正在寻找一种让一个线程在另一个线程中引发事件的方法 编辑: 我说“立即”一词,正如一些评论家指出的那样,这是不可能的。我的意思是,如果gui线程处于空闲状态,则应该在毫秒到十亿分之一秒的范围内相当快地发生(这应该是正确的,如果我做对的话)。 案例示例: 我有一个具有Parent类的项目。该Parent类创建一个子线程“ Gui”,该子线程包含一个javafx应用程序并实现
在我的Angular 2应用程序中,我使用普通的HTML5输入类型“范围”为用户提供一个简单的滑块组件。 我需要知道用户何时释放滑块。释放意味着使用鼠标完成拖动并释放鼠标按钮。为此,我参加了OnMouseUp活动。然而,这不适用于我使用触摸设备的情况。 在我的平板电脑,我可以拖动滑块aroun,但当释放它与我的手指的事件是没有发射。 我知道,这不是鼠标,但是什么事件相当于在鼠标上运行并在触摸设备上
motioncfp.java:
我正在使用Quartz和Spring来安排工作。我有一份按计划每小时运行的工作。问题是,当计划的作业耗时超过一小时时,该作业的“下一次启动时间”仍然是旧时间,不会启动(因为启动时间已经过去)。 我的问题是,如果工作时间超过预定时间,我们如何更改“下一次点火时间”?