entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Manejar JDesktopPane desde JinternalFrame, en clases y paquetes diferentes.

Hola Chic@s,
Necesito que alguien con paciencia me pueda ayudar en mi proyecto.
Os pongo en situación: Java, Eclipse = Interfaz Gráfica.
Adjunto imagen de lo que quiero conseguir:
Ventanas de Swing

La cuestión es que quiero que al pulsar el botón de la Ventana Principal, emerga la ventana interna JInternalFrame y que al escribir algo en el cuadro de texto y pulsar el botón "enviar", lo que he escrito se muestre en el campo de texto. Conozco métodos para cambiar los cuadros de texto y tal, pero lo que no consigo es que se muestre el texto al pulsar en la ventana principal.

La jerarquía de clases es la siguiente:
PACKAGE 1
--- Class UIPanel
PACKAGE 2
--- Class Resultados

Inicialmente el campo de texto de la ventana principal está vacio.

No paro de intentar cosas y no logro que ponga el texto en la ventana principal. Logro que salga la ventana interna, pero al darle a enviar, me peta el programa (sin dejar de funcionar) y no hace lo que quiero.

También decir, que en el botón de la ventana principal (JButton) en el actionPerformed crea el objeto de la clase Resultados, que es la ventana interna.
Y en el ActionPerformed del botón "enviar" de la ventana interna es donde he probado a modificar el texto del campo de texto de la ventana principal.

Espero no haber liado mucho el tema.

Un saludo y muchas gracias a todos.

2 Respuestas

1voto

cloudman Puntos4020

Muy buenas.

A simple vista lo que intentas hacer parece sencillo, ¿entiendo que estarás utilizando un JDesktopPane como panel de fondo, y dentro de este estás incluyendo las ventanas internas no?.

Si no es así, ese es tu fallo. Las ventanas internas deben ser manejadas dentro del JDesktopPane, viene a ser como el escritorio donde vas incluyendo ventanas internas. Si se supone que estás haciendo todo esto, no sé donde puedes estar teneindo el fallo, si quieres puedes postear errores o algo para ver si podemos ayudar.

En principio, con el JDesktopPane, sólo sería añadir ventanas, cambiarle la visibilidad según te interesase y agregar eventos a los botones.

Resumiendo sería:

Un saludo.

0voto

javalderas comentado

Gracias Cloudman por responder. Efectivamente lo hago todo desde un JDestokPane.
Pero en vez de crear la ventana interna desde esa clase, lo que hago es crearme otra clase para la ventana interna porque necesito manejar varias cosas, y en la clase principal, la del escritorio, lo que hago es crear un objeto de tipo MiVentanaInterna.

El programa peta cuando le doy al botón enviar, que básicamente lo que hace es poner el texto de la ventana interna, en el JTextPane (cuadro de texto en la imagen) de la ventana principal.

Sé que es sencillo pero no sé porque peta. Lo he probado todo, pasándole un objeto de tipo VentanaPrincipal padre, a la clase de la ventana interna, para poder invocar una función de la clase principal que cambie ese texto. Creo que eso sería lo correcto.

Puedo postear el trozo de código o el código entero si queréis. Sí os digo, que lo que he dibujado arriba es un poco simplificar lo que tengo, ya que hay algunos botones más, pero por motivos de claridad he puesto lo que realmente no funciona, que como he dicho antes, es la función de pulsar el botón ENVIAR y que coja el texto de la ventana interna y lo ponga en el cuadro de texto de la ventana principal.

Un saludo

1voto

cloudman Puntos4020

Yo lo he hecho y realmente no sé donde puedes tener el fallo. Te puedo pasar el código y lo ves porque es sencillo, son 4 clases, una para cada ventana interna, otra para el controlador de las ventanas y otra para el Frame principal.

Yo he utilizado una clase a modo de controlador, por cada ventana interna que añado pues actualizo en este controlador, sabiendo que cada ventana interna a su vez tiene un nombre identifictivo. Éste controlador hereda de JDesktopPane tiene un método para localizar ventanas por nombre y para actualizar texto de cada ventana (he supuesto que las ventanas tienen todas un jtext), también tengo un array para saber que ventanas tengo y poder buscarlas luego en el mismo.

Tu tendrías una ventnaInterna principal, que cuando le das al botón se cierra y te abre otra ventnaInterna que se llama resultados, en la cual escribes y cuando das a enviar se cierra y se vuelve a abrir la otra actualizada con el texto.

Quizás lo que más te pueda ayudar es que la clase JinternalFrame tiene un método que es getDesktopPane. Cuando pulses el primer botón en la ventana interna principal, no necesitas referencias ni nada, porque puedes hacer ventanainterna.getdesktoppane().add(ventanaInternaResultados). De esta forma estarías añadiendo al desktopPane común (el controlador), una nueva ventana interna, pero lo estarías haciendo desde la ventanainterna primera. Yo en el evento del boton de la primera ventana tengo esto.

    emergente = new VentanaAuxiliar();
    emergente.setName("Emergente");
    emergente.setVisible(true);
    this.getDesktopPane().add(emergente);
    this.setVisible(false);

Añado al controlador uan nueva ventana llamada emergente, la pongo visible, y escondo la primera ventana interna. Y ahora en los eventos de la ventana emergente tengo esto.

   ContrVentanas aux = (ContrVentanas)this.getDesktopPane();
   aux.actualizar("Principal",this.campoTexto.getText());
   this.setVisible(false);

Obtengo el controlador, llamo al método para actualizar campos de texto de las ventanas(he supuesto que todas las ventnas internas lo tienen), le paso la ventana que quiero actualizar en este caso es la primera, y el texto aponer que en este caso es el de la ventana emergente, escondo la ventana emergente y pongo visible la otra.

He intentado explicartelo lo mejor posible, quizás te lies más aún, aunque espero que no. Como he dicho espero que te sirva de algo. Con el controlador, y el método getDesktopPane no deberías tener mucho problema. Esto se puede hacer mucho mejor logicamente, yo solo he querido reflejar lo que tu pretendías hacer.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta