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("");
}
}
}
}
}
});
これが欲しい: - 戻るボタンが押されてシフトが押された場合:新しい行を追加します。- 戻るボタンが押され、シフト ボタンが押されていない場合: 改行せずに送信します。
今では次のように動作します: - 戻るボタンを押してシフトを押した場合: 行は追加されません。何も起こりません。- 戻るボタンを押してシフトが押されていない場合: 送信されますが、もう一度入力を開始すると新しい行で始まります。
誰かが私がやりたいことをする方法を知っていますか?
編集:
シフトボタンが押されているかどうかを検出するために、他のコードを試しました:
if((k.getModifiersEx() == KeyEvent.SHIFT_DOWN_MASK) ||
(k.getModifiers() == KeyEvent.SHIFT_DOWN_MASK)) {
これもうまくいかない