Ricardo Palomares Martinez
2007-04-10 18:57:19 UTC
Buenas:
Tengo un problema con el orden en el que se ejecutan algunos event
listeners. Tengo un JInternalFrame (una ventana en una aplicación MDI,
vamos) con un aspecto similar al del explorador de archivos de
Windows, con un JTree en la parte izquierda con carpetas, y un panel
en la derecha con un JTextField para editar una propiedad del objeto
subyacente en el nodo seleccionado en el JTree.
Así que podría tener lugar la siguiente secuencia de acciones:
- Se hace clic en la izquierda para elegir una carpeta
- Se dispara un evento TreeValueChanged y el listener de éste debe
actualizar el contenido en el panel con datos que pertenecen al nodo
(carpeta) recién seleccionado del árbol
- Se hace clic en el JTextField en la derecha, y se introduce un valor
- Al salir del JTextField (y perder éste el foco), se dispara un
evento FocusLost, y el listener correspondiente debe obtener el texto
del JTextField y actualizarlo en el objeto subyacente del nodo
seleccionado del árbol
Esto funciona bien si salgo del campo pulsando [Tab] (lo que me lleva
a un JButton que hay debajo del campo de texto). Mi problema surge si,
mientras tengo el foco en el campo de texto, hago clic en otro nodo
del árbol. En este caso, TreeValueChanged se ejecuta *antes* de
LocusFost (lo cual no encuentro lógico; primero se pierde el foco del
campo de texto y sólo entonces puede cambiar el valor del nodo
seleccionado en el árbol, EMO).
Por más que busco, no he podido encontrar ningún documento que indique
la prioridad con la que se ejecutan los eventos. He buscado este mismo
problema en Internet, en los tutoriales de Java, en los archivos de
foros y listas de correo, y en la documentación de JavaHispano.org
(*), y no he encontrado nada. Si alguien puede ayudarme a variar el
comportamiento, o bien explicarme por qué estoy equivocado al pensar
que primero se debe perder el foco de un control y luego ganarlo en
otro, le estaré muy agradecido. :-)
(*) Por cierto, que en JavaHispano.org necesitan desesperadamente
colaboración de los usuarios, casi como nos pasa a otros con nuestras
cosas de traducir navegadores (http://www.proyectonave.es/). Debe ser
algo ligado al carácter de los españoles...
Saludos.
Tengo un problema con el orden en el que se ejecutan algunos event
listeners. Tengo un JInternalFrame (una ventana en una aplicación MDI,
vamos) con un aspecto similar al del explorador de archivos de
Windows, con un JTree en la parte izquierda con carpetas, y un panel
en la derecha con un JTextField para editar una propiedad del objeto
subyacente en el nodo seleccionado en el JTree.
Así que podría tener lugar la siguiente secuencia de acciones:
- Se hace clic en la izquierda para elegir una carpeta
- Se dispara un evento TreeValueChanged y el listener de éste debe
actualizar el contenido en el panel con datos que pertenecen al nodo
(carpeta) recién seleccionado del árbol
- Se hace clic en el JTextField en la derecha, y se introduce un valor
- Al salir del JTextField (y perder éste el foco), se dispara un
evento FocusLost, y el listener correspondiente debe obtener el texto
del JTextField y actualizarlo en el objeto subyacente del nodo
seleccionado del árbol
Esto funciona bien si salgo del campo pulsando [Tab] (lo que me lleva
a un JButton que hay debajo del campo de texto). Mi problema surge si,
mientras tengo el foco en el campo de texto, hago clic en otro nodo
del árbol. En este caso, TreeValueChanged se ejecuta *antes* de
LocusFost (lo cual no encuentro lógico; primero se pierde el foco del
campo de texto y sólo entonces puede cambiar el valor del nodo
seleccionado en el árbol, EMO).
Por más que busco, no he podido encontrar ningún documento que indique
la prioridad con la que se ejecutan los eventos. He buscado este mismo
problema en Internet, en los tutoriales de Java, en los archivos de
foros y listas de correo, y en la documentación de JavaHispano.org
(*), y no he encontrado nada. Si alguien puede ayudarme a variar el
comportamiento, o bien explicarme por qué estoy equivocado al pensar
que primero se debe perder el foco de un control y luego ganarlo en
otro, le estaré muy agradecido. :-)
(*) Por cierto, que en JavaHispano.org necesitan desesperadamente
colaboración de los usuarios, casi como nos pasa a otros con nuestras
cosas de traducir navegadores (http://www.proyectonave.es/). Debe ser
algo ligado al carácter de los españoles...
Saludos.
--
If it's true that we are here to help others,
then what exactly are the OTHERS here for?
If it's true that we are here to help others,
then what exactly are the OTHERS here for?