0

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

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

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

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

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

PS:我必须从纯文档中获取值,而不是从外部的 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);
 }
4

1 回答 1

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);
    }
于 2012-05-07T15:19:11.447 回答