文章目录

在JavaFX中使用ToolTip的话,会发现这个东西的显示延迟,显示时间都是写死的,没有开放API来设置这些时间.
不过我们可以使用反射来强行修改这些设置,下面是JRubyFX的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
behavior_field = javafx.scene.control.Tooltip.java_class.declared_field("BEHAVIOR")
behavior_field.accessible = true
behavior = behavior_field.static_value
timer_field = behavior.java_class.declared_field("activationTimer")
timer_field.accessible = true
timer = timer_field.value(behavior)
timer.key_frames.clear
# 设置显示前的延迟为0ms
timer.key_frames << Java::JavafxAnimation::KeyFrame.new(0.ms)
timer_field = behavior.java_class.declared_field("hideTimer")
timer_field.accessible = true
timer = timer_field.value(behavior)
timer.key_frames.clear
# 设置显示时间为10s
timer.key_frames << Java::JavafxAnimation::KeyFrame.new(10000.ms)

可以看出在JRubyFX中ruby只是单纯的调用JavaFX,并没有重新实现一遍.
所以JavaFX的API可以完全照搬过来,当然JRubyFX也为其创建了一些Ruby风格的别名.
getKeyFrames -> key_frames

文章目录