【问题标题】:JavaFX wait for enterJavaFX 等待进入
【发布时间】:2017-11-19 23:07:01
【问题描述】:

基本上,我想做的是类似于使用 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);
            });

由于动画的长度取决于文本的大小,因此将循环计数设置为无限期。除非我缺少其他方法让动画播放一次然后停止,否则我希望它在您按下回车(或我稍后决定的其他键)时调用timeline.stop(); 但我无法弄清楚如何添加任何类型的侦听器。尝试实现keyListener 似乎附带了各种我不需要的东西,而且它也不适用于TextField,而是想要一个JTextField,这可能很好,除了我不知道如何用 Swing 做任何事情。

目前,文本显示在TextFlow 中,来自Text 的文本。我假设听众会被添加到TextFlow,甚至是场景本身,老实说,我不知道该怎么做。这听起来很简单,但我似乎无法弄清楚。

【问题讨论】:

    标签: javafx listener keylistener


    【解决方案1】:

    KeyListener 是 AWT 类,而不是 JavaFX 类。除非您在 JavaFX 应用程序中嵌入 Swing 组件或在 Swing 应用程序中嵌入 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多