我有一个聊天应用程序。我希望chatTextArea
中的光标返回到TextArea chatTextArea
的位置0。
然而,这不会起作用:
chatTextArea.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode().equals(KeyCode.ENTER)) {
ChatClient.main(new String[]{"localhost", String.valueOf(4444), chatTextArea.getText()});
chatTextArea.setText("");
chatTextArea.positionCaret(0);
}
}
});
我怎样才能让它发挥作用?谢谢。
答案 0 :(得分:3)
TextArea
内部不使用onKeyPressed
属性来处理键盘输入。因此,设置onKeyPressed
不会删除原始事件处理程序。
要阻止{key}的TextArea
内部处理程序,您需要添加一个消耗该事件的事件过滤器:
chatTextArea.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode().equals(KeyCode.ENTER)) {
ChatClient.main(new String[]{"localhost", String.valueOf(4444), chatTextArea.getText()});
chatTextArea.setText("");
// chatTextArea.positionCaret(0); // not necessary
ke.consume(); // necessary to prevent event handlers for this event
}
}
});
事件过滤器使用相同的EventHandler
接口。不同之处仅在于它在任何事件处理程序之前被调用。如果事件过滤器使用事件,则不会为该事件触发事件处理程序。