【问题标题】:Constantly reading a String from JTextField不断从 JTextField 读取字符串
【发布时间】:2012-03-12 02:24:19
【问题描述】:

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

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

【问题讨论】:

  • 非常简单的一个;)

标签: java swing jtextfield string-length documentlistener


【解决方案1】:

你得到的是 change 的长度而不是 document 的长度:

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

应该是

int length = doc.getLength();

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多