已使用JavaFX KeyPressed事件,仍在Textfield中
我用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();
});
相关文章