Постоянное чтение строки из JTextField - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть 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 ]

3 голосов
/ 21 февраля 2012

Вы получаете длину изменения вместо длины документа :

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

должно быть

int length = doc.getLength();
0 голосов
/ 21 февраля 2012

Ответ, предоставленный Пейсли, действительно верен. Вы хотели бы добавить еще один способ сделать то же самое. Вы можете использовать привязки, которые добавляют концепцию ValueHolders, переменные, которые будут хранить и отражать любые изменения свойств ваших графических компонентов. Это может обеспечить очень эффективный способ реализации шаблона проектирования MVC с помощью Swing, поскольку связь между Model-Controller-View гораздо более эффективна и отделена.

JGoodies имеет отличную реализацию с открытым исходным кодом. Если вы можете потратить некоторое время и хотите улучшить свой дизайн, не стесняйтесь взглянуть.

...