停止Swing中事件的默认行为

我在通过单击发送按钮调用的方法中有以下代码,或者在一段代码中按消息文本字段中的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(""); } 

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

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

在调用sendMessage()之后尝试添加evt.consume() sendMessage()

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

JTextArea Enter键的默认Action是插入一个新行,如您所见。 因此,解决方案是使用自定义Action替换默认Action 。 这种方法的好处是,这个Action也可以被JButton (或JMenuItem等)使用。 ActionActionListener基本相同,您需要做的就是实现actionPerformed()方法。

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

正如卡米克所说,你应该绑定动作来输入密钥;

 Action sendAction = new AbstractAction(“Send”){
     public void actionPerformed(ActionEvent ae){
        //在这里做你的东西
     }
 };

 textarea.registerKeyboardAction(sendAction, 
        KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),JComponent.WHEN_FOCUSED);
 sendButton.setAction(sendAction);

如果你更有兴趣,我使用这种技术实现了textarea的Autoindentfunction: 这里