不断从JTextField读取String

时间:2012-02-21 18:44:04

标签: java swing jtextfield string-length documentlistener

我有一个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();

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

2 个答案:

答案 0 :(得分:3)

您获取更改的长度而不是文档的长度

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

应该是

int length = doc.getLength();

答案 1 :(得分:0)

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

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