JTextField和PlainDocument - 如何在remove事件中打印字符串?

时间:2012-05-07 14:48:33

标签: java swing events jtextfield documentlistener

我创建了一个JTextField,并使用PlainDocument中的扩展类设置了setDocument属性。

当我从文本框中删除时,我想打印剩下的字符串,但它只打印了一步。

让我们说。如果JTextField有一个像123456789的字符串,我用退格键擦除一个字符,那么它打印正常(12345678)。但如果我删除让我们说“3”然后它显示“1234567”。所以我打印一个以前的值。如果我然后删除另一个字符,那么它将显示3被删除。 。只知道它知道长度发生了变化,并在后面打印了一个较少的字符。

如果我没有说清楚。我想打印文本字段从plainDocument代码中删除时的“真实”字符串。

当我删除它时会触发remove或removeupdate方法,当我的文本被打印时。 (可能是我提前一步打印)

PS:我必须从plaindocument获取值,而不是从外部的jtextfield获取。

这是我的代码

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);
 }

1 个答案:

答案 0 :(得分:3)

我使用默认文档复制了你对JTextField的所作所为。

首先,你的代码有一个错误 - 你使用长度 - 1而不是长度。还不确定你需要Document.getDefaultRootElement()。getDocument(),这对我来说似乎不对。

无论如何,我在下面创建的测试代码运行没有问题。鉴于我在您发布的代码中发现的错误,我会说如果实际上存在问题,那么您已经定制了一些您尚未在此处发布的内容


    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);
    }