首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX等待enter

JavaFX等待enter
EN

Stack Overflow用户
提问于 2017-11-20 07:07:02
回答 1查看 198关注 0票数 0

从本质上讲,我想做的是使用JavaFX实现一个基于文本的RPG。现在,为了显示一些文本,我有如下代码:

代码语言:javascript
复制
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,甚至是场景本身,老实说,我不知道该怎么做。这听起来很简单,但我似乎想不通。

EN

回答 1

Stack Overflow用户

发布于 2017-11-20 19:08:45

KeyListener是一个AWT类,而不是一个JavaFX类。除非您将Swing组件嵌入到JavaFX应用程序中,或者将JavaFX节点嵌入到Swing应用程序中,否则应该使用JavaFX的等效EventHandler<KeyEvent>。此外,没有必要仅仅为了接收关键事件而在应用程序中包含TextField (或Swing的JTextField)。您可以将监听器直接添加到Scene

代码语言:javascript
复制
final KeyCode stopKey = KeyCode.ENTER;
EventHandler<KeyEvent> handler = event -> {
    if (event.getCode() == stopKey) {
        timeline.stop();
    }
};
scene.setOnKeyPressed(handler);

请注意,事件可以在它们到达场景之前由节点消费,例如由具有焦点的TextField消费。在这种情况下,您可以通过将侦听器注册为事件筛选器来确保获取事件:

代码语言:javascript
复制
// scene.setOnKeyPressed(handler);
scene.addEventFilter(KeyEvent.KEY_PRESSED, handler);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47382995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档