2

我有一个 DocumentListener 来查找 JTextField 中的任何更改:

public class MyDocumentListener implements DocumentListener {

    static String text;

    public void insertUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void removeUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void changedUpdate(DocumentEvent e) {
        //Plain text components do not fire these events
    }

    public static String passText() {
        System.out.println("string that will be passed is: "+text);
        return text;
    }

    public void updateLog(DocumentEvent e) {

        Document doc = (Document)e.getDocument();
        int length = e.getLength();

        try {
            text = doc.getText(0, length);
        } catch (BadLocationException e1) {
            e1.printStackTrace();
        }
        System.out.println("you typed "+text);  
    }
}

然后,在另一个班级:

String info = MyDocumentListener.passText();

问题是我只得到一个字符,而不是整个字符串。有什么建议么?

4

2 回答 2

3

您得到的是更改的长度而不是文档的长度:

int length = e.getLength(); // probably 1

应该

int length = doc.getLength();
于 2012-02-21T18:55:54.430 回答
0

佩斯利提供的答案确实是正确的。您想添加另一种方法来做同样的事情。您可以使用绑定,它添加了 ValueHolders 的概念,这些变量将立即存储和反映图形组件的任何属性更改。它可以提供一种非常有效的方式来使用 Swing 实现 MVC 设计模式,因为模型-控制器-视图之间的通信更加有效和解耦。

JGoodies有一个优秀的开源实现。如果您可以花一些时间并想改进您的设计,请不要犹豫,看看。

于 2012-02-21T19:34:12.607 回答