Estoy desarrollando una aplicación en la que deseo que se active algo tanto por parte del usuario actualizando el contenido de un JTextArea, como manualmente presionando un JButton.Uso de Actions with DocumentListener
He hecho la primera parte utilizando un DocumentListener y poniendo el código correspondiente en su método insertUpdate
.
No he usado Action
antes, pero he oído que son útiles para situaciones donde necesita que se activen varios controles. ¿Es posible activar la acción desde DocumentListener? ¿Es una buena idea usar Actions en absoluto, o debería poner mi código en un método normal?
(en el constructor):
textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
// do something
}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {}
});
y la acción, que es un campo:
Action doSomething = new AbstractAction("Do Something!") {
@Override
public void actionPerformed(ActionEvent e) {
// do it
}
};
aclaración:
El JTextArea recibirá el texto que se pega en por el usuario, que quiero analizar automáticamente. El análisis depende de otros valores establecidos en otra parte de la GUI; si el usuario cambia estos otros valores, es posible que desee volver a analizar el texto, de ahí la necesidad de realizar la misma acción presionando un botón.
Las ventajas de 'Action' generalmente superan la ligera sobrecarga marginal, como se menciona [aquí] (http://stackoverflow.com/questions/7253712/java-swing-using-actionmap/7255711#7255711). – trashgod
Quieres decir agregar algo como 'doSomething.actionPerformed (new ActionEvent (???))' en el método insertUpdate? –
Sí; pero, como dice @camickr, tendrás que decidir si tiene sentido hacerlo. ¿Por qué no simplemente calla un método común? – trashgod