Lettura costante di una stringa da JTextField
-
28-10-2019 - |
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?
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.