Pergunta

Eu tenho um DocumentListener para procurar quaisquer alterações no 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);  
    }
}

E então, na outra aula:

String info = MyDocumentListener.passText();

O problema é que estou obtendo apenas um caractere, em vez de toda a String.Alguma sugestão?

Foi útil?

Solução

Você está obtendo o comprimento da alteração em vez do comprimento do documento :

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

deve ser

int length = doc.getLength();

Outras dicas

A resposta fornecida por paislee está realmente correta.Você gostaria de adicionar apenas outra maneira de fazer a mesma coisa.Pode-se utilizar bindings, que agregam o conceito de ValueHolders, variáveis que irão armazenar e refletir imediatamente quaisquer alterações de propriedades de seus componentes gráficos.Ele pode fornecer uma maneira muito eficaz de implementar o padrão de design MVC com Swing, uma vez que a comunicação entre Model-Controller-View é muito mais afetiva e desacoplada.

JGoodies tem uma implementação excelente e de código aberto para ele.Se você puder gastar algum tempo e quiser melhorar seu design, não hesite em dar uma olhada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top