Q:

JTextField's and PlainDocument - how to print the string at the remove event?

I created a JTextField and set the setDocument property with an extended class from PlainDocument.
When I'm erasing from the textbox I want to print the string that is remaining, but it prints just one step before.
let's say. If the JTextField has a string like 123456789 and I erase one char with the backspace then it prints ok (12345678). But if I delete let's say "3" then it shows "1234567". So Im printing a previous value. If I then delete another char, then it will show that 3 was erased.
. only that it knows that the length changed and prints one less char at the back.
If I didnt make myself clear. I want to print the "real" string that the textfield has when deleting from the plainDocument code.
When I delete it triggers the remove, or removeupdate method there is when my text gets printed. (probably im printing one step earlier)
PS: I have to get the value from the plaindocument and not from the jtextfield in the outside.
this is my code
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent evento)
 {                      
        try {               
            super.removeUpdate(evento);
            removePostUpdate(evento);

        } catch (BadLocationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

 }

protected void removePostUpdate(AbstractDocument.DefaultDocumentEvent evento) throws BadLocationException
 {       
     try {              
            palabraCompleta = evento.getDocument().getDefaultRootElement().getDocument().getText(0,evento.getDocument().getDefaultRootElement().getDocument().getLength()-1 );                              
            System.out.println(evento.getPresentationName());               
        } catch (BadLocationException e) {          
            e.printStackTrace();
        }
        System.out.println(palabraCompleta);
 }

A:

I have replicated what you have done with a JTextField using its default document.
First of all, you code has a bug - you are using length - 1 instead of length. Also not sure you need Document.getDefaultRootElement().getDocument() that just seems wrong to me.
Anyway, the test code I created below runs without a problem. Given the bugs I found in the code you posted, I would say that IF there is actually a problem its with something you've customized that you haven't posted here

    public static void testDocument () {
        final JTextField tf = new JTextField();
        tf.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void changedUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());
                try {
                    System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());               
                try {
                    System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                System.out.println(tf.getText());               
                try {
                    System.out.println("doc: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
                } catch (BadLocationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        });
        WindowUtilities.visualize(tf);
    }

