消耗的JavaFx KeyPressed事件仍在TextField中

时间:2016-05-27 11:39:43

标签: java javafx textfield key-events

我用JavaFx做了一个简单的Pong游戏。但是我在设置控件时遇到问题。我正在使用像这样的TextField:

control_0.setOnKeyPressed(new EventHandler<KeyEvent>()
        {
            @Override
            public void handle(KeyEvent ke)
            {
                control_0.setText(ke.getCode().toString());
                om.setControls(0,ke.getCode().toString());
                ke.consume();
            }
        });

但是,每当按下键入一个字符的键时,它就像在一个字符串中一样重写:sS。 用

替换handle()代码
control_0.setText("");
om.setControls(0,ke.getCode().toString());

负责这一点,但是箭头键和类似的东西在TextField中没有显示任何内容(尽管它们在游戏中起作用)。我如何解决这个问题/一致性问题?

1 个答案:

答案 0 :(得分:0)

您实际上似乎不需要TextField。您只需将TextField替换为Label,然后将事件处理程序添加到Scene

但是,如果您坚持使用TextField,则可以对所有KeyEvent使用事件过滤器,以防止事件达到默认EventHandler }修改TextField

的文本
control_0.addEventFilter(KeyEvent.ANY, evt -> {
    if (evt.getEventType() == KeyEvent.KEY_PRESSED) {
        control_0.setText(evt.getCode().toString());
    }
    evt.consume();
});