¿Cómo modificar un control en un formulario diferente?

Necesito usar el contenido de la primera columna de una JTable para establecer los valores en una lista desplegable de JComboBox. El problema es que JTable está en un formulario diferente (JFrame), por lo que no se puede acceder directamente al JComboBox privado. ¿Cómo puedo enviar una señal y/o evento desde el formulario JTable al formulario JComboBox para hacerle saber que necesita actualizar su contenido desplegable? No me preocupan los datos, puedo hacer una cadena pública [] o algo así, pero ¿cómo notifico correctamente al JComboBox que necesita actualizarse?

preguntado el 03 de mayo de 12 a las 21:05

Si necesita acceder al cuadro combinado desde fuera del jframe, hágalo público. Mejor aún, agregue un método público que devuelva su valor. -

Parece que no se puede hacer público el JComboBox. Es un control de swing que usé de la paleta de netbeans. Probé un método público para devolver el modelo JComboBox al formulario que desea cambiar, pero el compilador se queja de que una variable no estática (el JComboBox) no puede ser referenciada desde un contexto estático. -

Puede agregar un oyente al cuadro combinado y dejar que actualice su estado:

2 Respuestas

Necesito usar el contenido de la primera columna de un JTable para establecer los valores en un JComboBox la lista desplegable. El tema es que el JTable está en una forma diferente (JFrame) por lo que el privado JComboBox no es directamente accesible.

¿Y por qué la JComboBox y JTable deben tener acceso el uno al otro? Esos son solo componentes de vista. ¿Qué sucederá si desea mostrar el cuadro combinado sin mostrar la tabla (por ejemplo, en las pruebas)? Si recupera sus datos directamente del JTable tienes un problema serio. El momento en que creaste tu JTable tuviste un TableModel que contiene los datos reales de la JTable. Es ese modelo (o al menos los datos de ese modelo) el que debe compartirse.

Deje que el modelo del cuadro combinado y el modelo de la tabla compartan los mismos datos y todo irá bien.

contestado el 03 de mayo de 12 a las 22:05

Lo que dices es correcto. Los datos de la tabla se guardan en un archivo. Pero me han encargado una forma de actualizar el contenido del cuadro combinado cuando el usuario realiza un cambio en la tabla. El formulario que contiene la tabla normalmente no está visible, solo cuando es necesario cambiarlo. Los cambios en la tabla se guardan en un archivo desde el cual el cuadro combinado puede actualizarse, pero el cuadro combinado necesita saber cuándo actualizar. Estoy tratando de encontrar el tutorial de ActionListener pero la página es que falta. - Jacknad

@jacknad El TableModel desencadena eventos cuando se modifican los datos. Puede agregar un oyente a ese modelo: petirrojo

Volviendo a su respuesta original, dejaré que el cuadro combinado y la tabla compartan los mismos datos. Ahora solo necesito descubrir cómo modificar el cuadro combinado con los datos compartidos a medida que se abre, pero ese es un problema diferente. Un millón de gracias. - Jacknad

El modelo Swing MVC diría que debe actualizar los objetos del modelo. Cuando se vuelve a mostrar JComboBox, ve los nuevos valores del modelo.

contestado el 03 de mayo de 12 a las 21:05

Los objetos del modelo son privados. ¿Cómo le hago saber a JComboBox que necesita actualizar su modelo desde una forma diferente? - Jacknad

El modelo es algo que debe compartirse entre los elementos de la interfaz de usuario. Se les debe dar la información que necesitan mostrar. - duffymo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.