Search code examples
javaswingjtextareakeylistener

Output on keyPressed in JTextArea


When I am trying to get text from JTextArea and print it, it is printing the string after the next key is pressed I want to print it when I press the key.

The code is given below:

textArea_1.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            x=textArea_1.getText().toString();
            System.out.println(x);
        }

        @Override
        public void keyReleased(KeyEvent e) {
        }

        @Override
        public void keyTyped(KeyEvent e) {
        }
    });

For example First I pressed 's' key then I pressed 'a' key The output after pressing 'a' key is s The output after pressing 's' key is null But I want s just after i pressed 's' key


Solution

  • As already mentioned in comments, you can use a DocumentListener, for example:

    javax.swing.event.DocumentListener myDocumentListener = new javax.swing.event.DocumentListener() {
        @Override
        public void changedUpdate(javax.swing.event.DocumentEvent documentEvent) {
            output(documentEvent);
        }
        @Override
        public void insertUpdate(javax.swing.event.DocumentEvent documentEvent) {
            output(documentEvent);
        }
        @Override
        public void removeUpdate(javax.swing.event.DocumentEvent documentEvent) {
            output(documentEvent);
        }
        private void output(javax.swing.event.DocumentEvent documentEvent) {
            Document source = documentEvent.getDocument();
            int length = source.getLength();
            try {
                System.out.println(source.getText(0, length));
            }
            catch (javax.swing.text.BadLocationException ex) {
                System.err.println("Invalid Index Supplied!");
            }
        }
    };
    jTextArea1.getDocument().addDocumentListener(myDocumentListener);