我已經添加了一個keylistener到我的JTextArea字段,但它不像我預期的那樣工作。JTextArea換行新行+輸入
inputTextArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent k) {
//If the return button is hit, only set to a new line if shift is also down.
if(k.getKeyChar() == KeyEvent.VK_ENTER) {
if(k.isShiftDown()) {
inputTextArea.append(" \n");
} else {
//Send The Message...
boolean cleanTextField = false;
try {
sendMessage(inputTextArea.getText());
cleanTextField = true;
msgScrollPane.setAutoscrolls(true);
JScrollBar vbar = msgScrollPane.getVerticalScrollBar();
if ((vbar.getValue() + vbar.getVisibleAmount()) == vbar.getMaximum()) {
msgPane.setCaretPosition(msgDoc.getLength());
}
} catch (Exception ex) {
ex.printStackTrace();
cleanTextField = false;
} finally {
if(cleanTextField) {
inputTextArea.setText("");
}
}
}
}
}
});
我想這一點: - 如果返回按鈕被擊中並移下來:添加一個新行。 - 如果返回按鈕被擊中並且換檔按鈕沒有停止:不需要換行,但是提交。
現在它的行爲如下: - 如果我按下了返回按鈕並且換檔停機:沒有添加任何行。什麼都沒發生。 - 如果我點擊返回按鈕並且換檔沒有關閉:提交,但是如果我再次開始輸入,則以新行開始。
有人知道如何去做我想要的嗎?
編輯:
我嘗試了一些其他的代碼來檢測,如果Shift鍵是向下:
if((k.getModifiersEx() == KeyEvent.SHIFT_DOWN_MASK) ||
(k.getModifiers() == KeyEvent.SHIFT_DOWN_MASK)) {
這並不工作,以及
謝謝!這是我需要的解決方案! – dododedodonl 2010-01-29 21:48:28
+1爲我在網上找到的最不起眼的答案+1。 – sethro 2012-11-16 20:54:43