¿Es posible descubrir qué objeto generado generó un DocumentEvent? Algo así como lo que puedo hacer con ActionListener:cómo encontrar el componente fuente que generó un DocumentEvent
JTextField field = new JTextField("");
field.addActionListener(actionListener);
//inside ActionListener
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() instanceof JTextField) //true
}
me gustaría hacer lo mismo con DocumentEvent pero parece que no funciona de la misma manera:
JTextField field = new JTextField("");
field.getDocument.addDocumentListener(documentListener);
//inside documentListener
public void insertUpdate(DocumentEvent){
if (arg0.getSource() instanceof JTextField) //false: class is javax.swing.text.PlainDocument
if (arg0.getSource() instanceof MyComponent){
MyComponent comp = (MyComponent)arg0.getSource();
comp.callSpecificMethodUponMyComp();
}
}
El answser debe tomar en consideración los siguientes puntos:
- Para mis propósitos, conocer el tipo de objeto que generó el evento no es suficiente, pero necesito una referencia en tiempo de ejecución.
- Normalmente, los eventos se generan a partir de la extensión del objeto swing (myComp public JTextField). Estos objetos almacenan información adicional que debe recuperarse en tiempo de ejecución dentro del método listener (es. InsertUpdate)
- DocumentListener se implementa desde una clase que desconoce los campos que generaron los eventos. Diferentes campos de diferentes tipos pueden ser atacados al oyente en tiempo de ejecución.
Gracias por su respuesta. Muy útil, pero no es suficiente para mi diseño. Edité mi pregunta tratando de explicar mejor cuáles son mis necesidades – Heisenbug
La primera versión de esta respuesta, que establece una propiedad de 'propietario', parece encajar perfectamente con la pregunta (por cierto, ¡no sabía nada de eso!). ¿Puede explicar más específicamente por qué esto no satisface sus necesidades? –
@Jesse Barnum: creo que tienes razón. En realidad, he entendido mal primera respuesta dogbane que fue perfecto. De hecho, si quiero tener una referencia directa al tipo MyComponent, puedo hacer algo como field.putProperty ("MyComponent", anInstanceOfMyComponent), ¿verdad? (Me siento un poco estúpido ahora :(, tal vez las líneas de código de estos días me hicieron confundir) – Heisenbug