停止Swing中事件的默认行为

Mac*_*cha 5 java user-interface swing event-handling

我在通过单击发送按钮调用的方法中有以下代码,或者在一段代码中按消息文本字段中的Enter键.

// In class ChatWindow
private void messageTextAreaKeyPressed(java.awt.event.KeyEvent evt) { // Event handler created by Netbeans GUI designer to call this method.           
    if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
        sendMessage();
    }
}   
public void sendMessage() {
    String currentMessage = messageTextArea.getText();
    addMessage("You", currentMessage);
    app.sendMessage(currentMessage, 1);
    messageTextArea.setText("");
}
Run Code Online (Sandbox Code Playgroud)

最后一段代码使文本区域空白.但是,在按Enter按钮发送消息后,文本框包含换行符,而不是为空.

我的猜测是,在我的事件处理程序运行之后,然后添加了换行符.如何停止添加换行符?

akf*_*akf 14

evt.consume()在致电后尝试添加sendMessage()

private void messageTextAreaKeyPressed(java.awt.event.KeyEvent evt) { 
 if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
    sendMessage();
    evt.consume();
 }
}  
Run Code Online (Sandbox Code Playgroud)


cam*_*ckr 9

Actiona中Enter键的默认设置JTextArea是如您所见插入新行.所以解决方案是Action用自定义替换默认值Action.这种方法的好处是它Action也可以被JButton(或JMenuItem等)使用.An Action基本上与a相同ActionListener,您需要做的就是实现该actionPerformed()方法.

阅读Key Bindings以了解如何完成此操作.所有Swing组件都使用Key Bindings.

  • 据我所知,对论坛不熟悉,-2表示有几个人认为答案是错误的或误导性的.我是否得到否定因为我没有解释行动是什么或其他原因?此外,每当在帖子中添加新的解决方案/评论时,我是否应该接收自动电子邮件? (3认同)