我在通过单击发送按钮调用的方法中有以下代码,或者在一段代码中按消息文本字段中的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按钮发送消息后,文本框中包含换行符,而不是为空。
我的猜测是,在我的事件处理程序运行之后,然后添加了换行符。如何停止添加换行符?
答案 0 :(得分:14)
在致电evt.consume()
sendMessage()
private void messageTextAreaKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
sendMessage();
evt.consume();
}
}
答案 1 :(得分:9)
Action
中Enter键的默认JTextArea
是插入新行,如您所见。因此,解决方案是使用自定义Action
替换默认的Action
。这种方法的好处是Action
(或JButton
等)也可以使用此JMenuItem
。 Action
基本上与ActionListener
相同,您只需要实现actionPerformed()
方法。
阅读Key Bindings以了解如何完成此操作。所有Swing组件都使用Key Bindings。
答案 2 :(得分:2)
正如卡米克所说, 你应该绑定动作来输入密钥;
Action sendAction = new AbstractAction("Send"){ public void actionPerformed(ActionEvent ae){ // do your stuff here } }; textarea.registerKeyboardAction(sendAction, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), JComponent.WHEN_FOCUSED); sendButton.setAction(sendAction);
如果你更喜欢,我使用这种技术为textarea实现了Autoindent功能: here