按Enter键时如何阻止光标移动到TextArea中的新行

时间:2014-11-05 08:50:31

标签: javafx textarea

我有一个聊天应用程序。我希望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);
        }
    }
});

我怎样才能让它发挥作用?谢谢。

1 个答案:

答案 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接口。不同之处仅在于它在任何事件处理程序之前被调用。如果事件过滤器使用事件,则不会为该事件触发事件处理程序。