已使用JavaFX KeyPressed事件,仍在Textfield中

2022-08-11 00:00:00 java javafx textfield key-events

我用JavaFX制作了一个简单的乒乓球游戏。然而,我在设置控件时遇到了问题。我使用的文本字段如下:

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();
            }
        });
但是,每当按下键入字符的键时,它就会像so:ss一样在Textfield中复制。 将Handle()代码替换为

control_0.setText("");
om.setControls(0,ke.getCode().toString());

负责处理这一点,但是箭头键和类似键在Textfield中不显示任何内容(尽管它们在游戏中可以工作)。如何解决此问题/一致性问题?


解决方案

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

但是,如果您坚持使用TextField,您可以对所有KeyEvent使用事件筛选器,以防止事件达到修改TextField

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

相关文章