从本质上讲,我想做的是使用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);
});因为动画的长度取决于文本的大小,所以循环计数被设置为不确定。除非我错过了让动画播放一次然后停止的其他方法,否则我希望当您按enter键(或我稍后决定的其他键)时,它将调用timeline.stop();,但我不知道如何添加任何类型的侦听器。尝试实现keyListener似乎伴随着各种我不需要的东西,而且它也不能与TextField一起工作,相反,它需要一个JTextField,这可能很好,除了我不知道如何使用Swing做任何事情。
目前,该文本显示在Text文本的TextFlow中。我假设监听器会被添加到TextFlow,甚至是场景本身,老实说,我不知道该怎么做。这听起来很简单,但我似乎想不通。
发布于 2017-11-20 19:08:45
KeyListener是一个AWT类,而不是一个JavaFX类。除非您将Swing组件嵌入到JavaFX应用程序中,或者将JavaFX节点嵌入到Swing应用程序中,否则应该使用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);https://stackoverflow.com/questions/47382995
复制相似问题