Problema com jTextArea2KeyPressed

11 respostas
V

Pessoal,

criei esse método:

private void jTextArea2KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
        if (evt == evt.VK_ENTER) { //isso não funciona
            this.jButton1ActionPerformed(evt);
        }
    }

Quero que ele chame esse método quando acabar de digitar e teclar enter.

Como posso fazer isso?

Vinicius.

11 Respostas

cassio

Opa!

Tenta assim

private void jTextArea2KeyPressed(java.awt.event.KeyEvent evt) {
 // TODO add your handling code here:
         if (evt == java.awt.event.KeyEvent.VK_ENTER) {
           //seu código
         }
     }

Falou!

V

Tinha tentado isso, mas java.awt.event.KeyEvent.VK_ENTER é um int e não dá certo.

fiz assim:

private void jTextArea2KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:        
        if (evt.getKeyCode() == 10) {
            this.jButton1ActionPerformed(evt);
        }
    }

Outro problema, depois que clico no enter e manda o textarea, mas para o cursor na segunda linha, queria que ficasse an primeira linha.

Sabe como fazer isso?

Vinicius.

cassio
JTextArea area = new JTextArea();
int actualPosition = area.getCaretPosition();
//seu evento + código e blablabla
area.setCaretPosition(actualPosition);

Tem outro esquema, que é sobrescrever a ação normal do enter em um JTextArea (que obviamente é pular pra próxima linha…), mas é mais complicado e não lembro de cabeça… Sei, porque fiz isso com o evneto do enter em uma JTable pra ela não pular pra próxima linha tb:)

Mas, se vc só vai escrever uma linha de texto do JTextArea (é isso mesmo?), pq vc não usa um JTextField?!

Falou!

V

Não deu certo.

Tenho o seguinte código:

jTextArea2KeyPressed:

private void jTextArea2KeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:     
        if (evt.getKeyCode() == 10) {
            this.jButton1ActionPerformed(evt);            
        }
    }

e o jButton1ActionPerformed:

private void jButton1ActionPerformed(KeyEvent evt) {
        // TODO add your handling code here:
        String chatMessage = this.getChatMessage();        
        if (chatMessage == null || chatMessage.trim().equals("")) {
            final ProgressDialog pd = new ProgressDialog(this, true);
            pd.init(true);
            pd.setTitle("teste");
            JOptionPane.showMessageDialog(pd, "Você não digitou a mensagem!", "Erro", JOptionPane.WARNING_MESSAGE);            
        } else {
            try {
                ResourceBundle bundle = ResourceBundle.getBundle("dmdrec_config");
                long presentationID = this.getPresentationID();
                String apresentador = this.getUsername();
                String host = bundle.getString("server.uri.presentation.slides.send")+"?" +
                        "AC=2&presentationID=" + presentationID + 
                        "&question=" + unHTMLfy(chatMessage) + 
                        "&username=" + apresentador + "";
                int port = 7070;
                String url = null;
                try {
                    url = "http://dmdcpqd.cpqd.com.br:"+ port + host;
                } catch(MissingResourceException e) {
                    e.printStackTrace();
                    url = "http://dmdcpqd.cpqd.com.br:"+ port + host;
                }
                HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
                conn.setRequestProperty("User-agent", "DMDRecorder");
                conn.setRequestMethod("POST");
                conn.connect();
                System.out.println("Reset request: " + conn.getResponseCode());
                conn.disconnect();
                jTextArea2.setText(null);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }

Como encaixo as coisas que vc falou para funcionar?

Vinicius.

cassio

Per que eu vou ver e ja te falo

cassio

Pronto, acho que é isso
Fiz diferente, pesquisei aqui como eu havia feito com a JTable, a idéia é a mesma…
Ao invés de usar KeyEvent, usei ActionMap e InputMap.

Coloca isso onde vc cria sua JTextArea (faça as devidas adaptações)

InputMap inputMap = area.getInputMap();
ActionMap actionMap = area.getActionMap();
Object transferTextActionKey = "ENTER_EVENT"; 
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),transferTextActionKey);
actionMap.put(transferTextActionKey,new AbstractAction() {		 
		 		public void actionPerformed(ActionEvent e)		 
		 			{				                 
						NomeDesteFrame.this.jButton1ActionPerformed();		
		 			}		 
		 	});

E muda a assinatura do evento…
Ao inves de

private void jButton1ActionPerformed(KeyEvent evt)

use

private void jButton1ActionPerformed()

Diz ai se deu certo ok?! Aqui funcionou :slight_smile:

V

Cassio,

Não estou entendendo diretio onde exncaixar as coisas, vc pode dar um aolhada e ver se me ajuda.

Apenas queria q após eu enviar os dados usando o “enter”, ele voltasse automaticamente para a primeira linha do textarea.

Vinicius.

cassio

Mas vc quer apagar todo o texto do jTextArea quando o ENTER for pressionado?! Tipo uns Instant Messenger?!

V

Usei,

private void jTextArea2KeyReleased(java.awt.event.KeyEvent evt) {

// TODO add your handling code here:

if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {

this.jButton1ActionPerformed(evt);

}

}

E não rpecisei fazer nada.

Vai entender!!!

Viu, outro probleminha:

Quando tento transformar caracteres especiais, uso essa fução

private String HTMLfy(String s) {
        String str = s.replaceAll("<span class=\"msg_sender\">", "").replaceAll("</span>", "").replaceAll("<br>", "\n");
        str = str.replaceAll("ã", "&atilde").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("õ", "&otilde;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("á", "&aacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("é", "&eacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("í", "&iacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ó", "&oacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ú", "&uacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ý", "&yacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("â", "&acirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ê", "&ecirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ô", "&ocirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("î", "&icirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("û", "&ucirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ç", "&ccedil;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("à", "&agrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("è", "&egrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ì", "&igrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ò", "&ograve;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ù", "&ugrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ù", "&Ugrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ò", "&Ograve;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ì", "&Igrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("È", "&Egrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("À", "&Agrave;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ä", "&auml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ë", "&euml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ï", "&iuml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ö", "&ouml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ü", "&uuml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ü", "&Uuml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ö", "&Ouml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ï", "&Iuml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ë", "&Euml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ä", "&Auml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ÿ", "&yuml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ñ", "&ntilde;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ñ", "&Ntilde;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ã", "&Atilde;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Õ", "&Otilde;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Á", "&Aacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("É", "&Eacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Í", "&Iacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ó", "&Oacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ú", "&Uacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ý", "&Yacute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Â", "&Acirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ê", "&Ecirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ô", "&Ocirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Î", "&Icirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Û", "&Ucirc;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("Ç", "&Ccedil;").replaceAll("\n", "<br>").replaceAll("\r", "");              
        str = str.replaceAll("¨", "&uml;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("§", "&sect;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("ª", "&ordf;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("º", "&ordm;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("°", "&deg;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("´", "&acute;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("%", "&#37;").replaceAll("\n", "<br>").replaceAll("\r", "");
        str = str.replaceAll("&", "%26").replaceAll("+", "%2B").replaceAll("#", "%23");
        return str;
    }//HTMLfy

e me retorna esse erro:

java.util.regex.PatternSyntaxException: Dangling meta character + near index 0

+

^

at java.util.regex.Pattern.error(Pattern.java:1650)

at java.util.regex.Pattern.sequence(Pattern.java:1787)

at java.util.regex.Pattern.expr(Pattern.java:1687)

at java.util.regex.Pattern.compile(Pattern.java:1397)

at java.util.regex.Pattern.(Pattern.java:1124)

at java.util.regex.Pattern.compile(Pattern.java:817)

at java.lang.String.replaceAll(String.java:2000)

at br.com.cpqd.www.dmd.chat.ChatFrame.HTMLfy(ChatFrame.java:322)

at br.com.cpqd.www.dmd.chat.ChatFrame.jButton1ActionPerformed(ChatFrame.java:183)

at br.com.cpqd.www.dmd.chat.ChatFrame.access$000(ChatFrame.java:31)

at br.com.cpqd.www.dmd.chat.ChatFrame$1.actionPerformed(ChatFrame.java:82)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
cassio

Na última linha dessa sua listagem

str = str.replaceAll("&", "%26").replaceAll("+", "%2B").replaceAll("#", "%23");

O “+” é um metacaracter quando está dentro de um expressão regular. O replace trabalha com expressões regulares. Vc presia “escapar” este caracter. Coloca

str = str.replaceAll("&", "%26").replaceAll("\+", "%2B").replaceAll("#", "%23");

ou

str = str.replaceAll("&", "%26").replaceAll("\\+", "%2B").replaceAll("#", "%23");

Não lembro se é com uma ou duas barras invertidas :stuck_out_tongue:

Falou!

dudaskank

se não me engano é uma só mesmo… e vc também não precisa fazer .replaceAll("\n", “
”).replaceAll("\r", “”); basta uma vez só que é suficiente.

flw

Criado 19 de julho de 2006
Ultima resposta 19 de jul. de 2006
Respostas 11
Participantes 3