He agregado un keylistener a mi campo JTextArea, pero no se comporta como esperaba.JTextArea nueva línea en shift + enter
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("");
}
}
}
}
}
});
quiero esto: - Si el botón de retorno es golpeado y el desplazamiento es hacia abajo: añadir una nueva línea. - Si se presiona el botón de retorno y el botón de cambio no está abajo: no hay línea nueva, pero envía.
Ahora se comporta así: - Si presiono el botón de retorno y el cambio está abajo: no se agregó ninguna línea. No pasa nada. - Si presiono el botón de retorno y el desplazamiento no está abajo: enviado, pero si empiezo a escribir nuevamente, comienza en una nueva línea.
¿Alguien sabe cómo hacer lo que quiero?
EDIT:
he intentado algún otro código para detectar si el botón de cambio se ha reducido:
if((k.getModifiersEx() == KeyEvent.SHIFT_DOWN_MASK) ||
(k.getModifiers() == KeyEvent.SHIFT_DOWN_MASK)) {
esto no funciona así
¡Gracias! ¡Esta es la solución que necesitaba! – dododedodonl
+1 por la respuesta menos hacky que he encontrado en línea. – sethro