2009-07-01 25 views
5

我通過單擊發送按鈕或按消息文本字段中的回車按鈕調用方法中的代碼位置如下代碼片段。在Swing中停止事件的默認行爲

// 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(""); 
} 

代碼的最後一位空白文本區域。但是,通過按下輸入按鈕發送消息之後,而不是空的,文本框將包含一個換行符。

我的猜測是,在我的事件處理程序運行後,然後添加換行符。如何停止添加的換行符?

回答

14

嘗試呼叫後加入evt.consume()sendMessage()

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

默認Action在一個JTextArea回車鍵是插入一個新行,你都看見了。因此,解決方案是用自定義Action替換默認的Action。這種方法的好處是這個Action也可以被JButton(或JMenuItem等)使用。 ActionActionListener基本相同,您只需執行actionPerformed()方法即可。

請閱讀Key Bindings以瞭解如何完成此操作。所有Swing組件都使用Key Bindings。

+3

作爲新的論壇,我的理解,-2表示幾個人相信答案錯誤或誤導。我沒有得到否定的答案,因爲我沒有解釋什麼是行動或其他原因? 此外,每當有新的解決方案/評論添加到發佈時,我是否應該收到自動發送的電子郵件? – camickr 2009-07-03 22:30:04

+0

似乎很多人並沒有真正幫助一個新來的人蔘加論壇,但感謝你,因爲你幫助我多次瞭解我的錯誤並指出我朝着正確的方向:-) – 2012-04-03 17:39:31

2

作爲camickr說, 你應該綁定動作來輸入密鑰;

 
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); 

如果您更interesed,我實現的自動縮進功能的文本區域,使用這種技術: here