Domanda

Ho un DocumentListener per cercare eventuali modifiche in 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 poi, nell'altra classe:

String info = MyDocumentListener.passText();

Il problema è che ottengo un solo carattere, invece dell'intera stringa.Qualche suggerimento?

È stato utile?

Soluzione

Stai ottenendo la lunghezza della modifica invece della lunghezza del documento :

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

dovrebbe essere

int length = doc.getLength();

Altri suggerimenti

La risposta fornita da paislee è effettivamente corretta.Vorresti aggiungere solo un altro modo per fare la stessa cosa.È possibile utilizzare associazioni, che aggiungono il concetto di ValueHolders, variabili che memorizzeranno e rifletteranno immediatamente qualsiasi modifica delle proprietà dei componenti grafici.Può fornire un modo molto efficace per implementare il modello di progettazione MVC con Swing poiché la comunicazione tra Model-Controller-View è molto più affettiva e disaccoppiata.

JGoodies ha un'implementazione eccellente e open source per questo.Se puoi spendere del tempo e vuoi migliorare il tuo design, non esitare a dare un'occhiata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top