基本上,我想要做的就是使用JavaFX的基于文本的RPG。现在,为了显示一些文字,我得到了这个:
final IntegerProperty i = new SimpleIntegerProperty(0);
Timeline timeline = new Timeline();
KeyFrame keyFrame = new KeyFrame(
Duration.millis(70),
event -> {
if (i.get() > info.getText().length()) {
timeline.stop();
} else {
text.setText(info.getText().substring(0, i.get()));
i.set(i.get() + 1);
}
});
timeline.getKeyFrames().add(keyFrame);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
timeline.setOnFinished(a -> {
hb_start.getChildren().clear();
hb_start.getChildren().addAll(start_left,start_right);
hb_start.setAlignment(Pos.CENTER);
});
因为动画的长度取决于文本的大小,所以cyclecount设置为无限期。除非有其他一些方法我想让动画播放一次然后停止,我希望它能让你按下回车键(或我之后决定的其他一些键)来调用timeline.stop();
但我无法弄清楚如何添加任何类型的听众。尝试实现keyListener
似乎带来了我不需要的各种东西,它也不适用于TextField
,而是需要一个JTextField
,这可能是TextFlow
没问题,除了我不知道如何用Swing做任何事情。
目前,该文字显示在Text
文本的TextFlow
中。我假设听众会被添加到[general]
VARDIR="../var"
LOGDIR="../var/log"
HOST=$(hostname)
DAY=monday
[animals]
CATS=("cat" "food" "eur" "100" "150" ),
DOGS=("dog" "food" "usd" "5000" "8000"),
,甚至是场景本身,老实说,我不知道该做什么。这听起来很简单,但我似乎无法弄明白。
答案 0 :(得分:0)
KeyListener
是一个AWT类,而不是JavaFX类。除非您在Swing应用程序中将Swing组件嵌入JavaFX应用程序或JavaFX节点,否则应使用JavaFX的等效EventHandler<KeyEvent>
。此外,您无需在应用程序中包含TextField
(或Swing的JTextField
),只是为了接收关键事件。您可以将侦听器直接添加到Scene
:
final KeyCode stopKey = KeyCode.ENTER;
EventHandler<KeyEvent> handler = event -> {
if (event.getCode() == stopKey) {
timeline.stop();
}
};
scene.setOnKeyPressed(handler);
请注意,节点在到达场景之前可以使用它们,例如:由具有焦点的TextField
。在这种情况下,您可以确保通过将侦听器注册为事件过滤器来获取事件:
// scene.setOnKeyPressed(handler);
scene.addEventFilter(KeyEvent.KEY_PRESSED, handler);