如何在vaadin TextArea中检测输入键按下

Big*_*ion 9 java textarea keypress vaadin

我使用vaadin TextArea作为粗略的控制台.用户可以输入在按下回车键时应该执行的命令.有没有办法在TextArea上使用侦听器指定它?

我发现最接近的是使用:

TextArea textArea = new TextArea();
textArea.addTextChangeListener(this);
textArea.setTextChangeEventMode(TextChangeEventMode.EAGER);
Run Code Online (Sandbox Code Playgroud)

并处理文本更改事件:

@Override
public void textChange(TextChangeEvent event) {
   System.out.println(event.getText());
}
Run Code Online (Sandbox Code Playgroud)

但是,只要在TextArea中输入了文本,就会触发此操作.我希望只有在按下回车键时才会收到通知.

小智 15

你不能听textarea本身的快捷键,但一个简单的解决方案是添加一个提交按钮并使用enter作为它的快捷方式:

Button b = new Button("submit", new Button.ClickListener() {
    @Override
    public void buttonClick(ClickEvent event) {
        // handle your event
    }
});
layout.addComponent(b);
b.setClickShortcut(KeyCode.ENTER);
Run Code Online (Sandbox Code Playgroud)

如果您不希望它,您可以隐藏按钮本身:

b.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用ShortcutActions和Handler,如下所述:https: //vaadin.com/book/-/page/advanced.shortcuts.html

但在任何一种情况下,您都必须考虑到在使用TextArea组件时监听enter键会导致冲突,因为您还需要使用相同的键才能到达TextArea中的下一行.