Sto sviluppando un'applicazione in cui voglio che venga attivato qualcosa sia dall'utente che aggiorna il contenuto di un JTextArea, sia manualmente premendo un JButton.Uso di Actions con DocumentListener
Ho eseguito la prima parte utilizzando DocumentListener e inserendo il codice pertinente nel suo metodo insertUpdate
.
Non ho usato prima Action
s, ma ho sentito che sono utili per situazioni in cui è necessario attivare un'azione da più controlli. È possibile attivare l'azione da DocumentListener? È una buona idea usare le azioni o dovrei semplicemente inserire il mio codice in un metodo normale?
(nel costruttore):
textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
// do something
}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {}
});
e l'azione, che è un campo:
Action doSomething = new AbstractAction("Do Something!") {
@Override
public void actionPerformed(ActionEvent e) {
// do it
}
};
precisazione:
Il JTextArea riceveranno testo che viene incollato in dall'utente, che voglio analizzare automaticamente. L'analisi dipende da altri valori impostati altrove nella GUI; se l'utente cambia questi altri valori, potrebbe voler ri-analizzare il testo, quindi la necessità di eseguire la stessa azione premendo un pulsante.
I vantaggi di "Azione" generalmente superano il lieve sovraccarico marginale, come menzionato [qui] (http://stackoverflow.com/questions/7253712/java-swing-using-actionmap/7255711#7255711). – trashgod
Vuoi dire aggiungere qualcosa come 'doSomething.actionPerformed (new ActionEvent (???))' nel metodo insertUpdate? –
Sì; ma, come nota @camickr, dovrai decidere se ha senso farlo. Perché non solo calla un metodo comune? – trashgod