【问题标题】:JTextField's and PlainDocument - how to print the string at the remove event?JTextField 和 PlainDocument - 如何在删除事件中打印字符串?
【发布时间】:2012-05-16 01:59:23
【问题描述】:

我创建了一个 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);
 }

【问题讨论】:

  • 无法编译此代码。这应该是 JTextField 的子类吗?此外,在 removePostUpdate palabraCompleta 中未定义。
  • 我只是粘贴重要部分... String palabraCompleta;是扩展plaindocument 的类的公共变量。我只粘贴了删除时触发的两种方法。

标签: java swing events jtextfield documentlistener


【解决方案1】:

我已经使用默认文档复制了您对 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);
    }

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 2022-11-16
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2012-06-16
    • 2019-03-01
    相关资源
    最近更新 更多