JavaFX等待进入

时间:2017-11-19 23:07:02

标签: javafx listener keylistener

基本上,我想要做的就是使用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"), ,甚至是场景本身,老实说,我不知道该做什么。这听起来很简单,但我似乎无法弄明白。

1 个答案:

答案 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);