Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con layouts en aplicación Swin

Estas en el tema de Duda con layouts en aplicación Swin en el foro de Java en Foros del Web. Hola!! Tengo una duda sobre layouts en una aplicación gráfica realizada con Swing. El caso es que tengo una aplicación con varios paneles, la estructura ...
  #1 (permalink)  
Antiguo 07/06/2007, 04:49
 
Fecha de Ingreso: noviembre-2006
Mensajes: 23
Antigüedad: 17 años, 6 meses
Puntos: 0
Duda con layouts en aplicación Swin

Hola!!

Tengo una duda sobre layouts en una aplicación gráfica realizada con Swing. El caso es que tengo una aplicación con varios paneles, la estructura es algo así:

- JFrame
--- JMenuBar
--- JPanel1
----- JPanel2
----- JPanel3
------- JSplitPane
--------- JPanel4
--------- JPanel5

El caso es que se me piran los tamaños por todos los lados y no se muy bien cómo ordenarlos. Mi idea es poner el tamaño inicial en el JFrame (con setPreferredSize) y que dependiendo de eso el resto de componentes tomen los valores relativos a ellos. Por ejemplo, si maximizo la pantalla que el resto de componentes aumente el tamaño proporcional a lo que se ha aumentado la pantalla.

Para ello, si identifico en cada uno de los componentes el PreferredSize no aumentan de tamaño porque siempre poseen el PreferredSize.

Para todo ello, me imagino que debería utilizar algún Layout pero no tengo mucha idea de utilizarlos. Se lo que son y lo que hace cada tipo de layout pero no se muy bien cómo aplicarlo... debería utilizar un layout apropiado para cada componente (JPanel, por ejemplo)??

Debería seguir definiendo el PreferredSize por cada componente?

Muchas gracias y un saludo!!
Kike.
  #2 (permalink)  
Antiguo 07/06/2007, 06:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con layouts en aplicación Swin

Hola:

Efectivamente, lo mejor es poner de forma adecuada los layouts. ¿Qué layout? depende de cómo quieras la ventana que se comporte.

El JFrame tiene por defecto un BorderLayout y entiendo que va bien si pones el JMenuBar en el NORTH y el JPanel1 en el CENTER. Si estás usando el hueco que tiene JFrame para el menu bar, tampoco deberías tener problemas. El JPanel1 en cualquier caso debería ir en el BorderLayout.Center.

Al JPanel1 debes ponerle un layout, pero depende de cómo quieres que vayan de tamaño JPanel2 con respecto a JPanel3. Si quieres que ambos sean del mismo tamaño, puedes puner un GridLayout al JPanel1. Esto estirará y obligará a JPanel2 y JPanel3 a tener el mismo tamaño.

En JPanel2 ponle un BorderLayout y el JSplitPane iria en el CENTER. así el JSplitPane se estirará hasta ocupar todo el JPanel2.

Aquí tienes algo rápido sobre cuando usar cada layout.

Si quieres que JPanel2 y JPanel3 tengan tamaños distintos, por por aquí cómo quieres que se comporten al estirar/encoger la ventana y a ver si te puedo indicar qué layout poner.

Otro tema, para el tamaño total de la ventana, lo mejor es usar el método pack() después de haber metido todo dentro. De esta forma la ventana cogerá automáticamente el tamaño adecuado para que quepa y se vea todo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 07/06/2007, 08:07
 
Fecha de Ingreso: noviembre-2006
Mensajes: 23
Antigüedad: 17 años, 6 meses
Puntos: 0
Arquitectura de componentes

Muxas gracias, voy a echarle un ojo y te comento como me ha ido...

Una cosa al hilo del esquema que puse, sobre la arquitectura de los componentes.

Consideráis que es un diseño coherente poner cada uno de los paneles en una clase distinta? O mejor dicho... yo tengo pensado hacer las siguientes clases: ClaseJFrame (que implemente el frame), ClaseJPanel1, ClaseMenuBar, ClaseJPanel2, ClaseJPanel3, etc...

En mi opinión, parece que meter todo en una misma clase (como te hace netbeans utilizando el editor visual) es un caos de código para organizarlo y dejarlo documentado. Creo que es más práctico repartirlo en clases... Lo que no tengo muy claro es que esa distribución de clases sea correcta (o vaya a dar muchos problemas en el futuro cuando le meta acciones, eventos, etc...)

¿Qué pensáis?

Gracias!
Kike.
  #4 (permalink)  
Antiguo 07/06/2007, 15:40
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Duda con layouts en aplicación Swin

Hola:

Depende un poco de lo que quieras y si van a tener o no mucho código.

Para una buena programación -de todas formas ya te digo que depende de lo que quieras- deberías separar lo que es código que hace cosas de lo que es ventanas o interface grafica de usuario.

Es correcto hacer una clase por cada panel y ventana, pero solo para construir el panel o ventana y ponerle métodos de tomaDatos() y dameDatos() para que sea capaz de presentar en pantalla los datos que se le pasan o recoger de pantalla los datos que se le pasan. También debería permitir a código externo añadir listeners en botones, eventos, etc que puedan resultar de interés desde fuera.

También habría que hacer clases que no sean paneles ni ventanas con el código importante, la lógica de tu programa, los datos. Deberían ser lo más independientes posible de las ventanas -de hecho, no deberían tener nada que ver con los paneles ni ventanas en absoluto-.

Finalmente, tendrías que hacer clases que relacionan las dos anteriores. Que son capaces de coger datos de las ventanas para pasárselas a las de la lógica de tu programa, pedirle a estas que hagan ciertas operaciones y pasar los datos a las ventanas. Estas clases son las que tendrían también las acciones y eventos de las ventanas.

Como te digo, esta sería una distribución más o menos ideal, aunque puede ser "trabajosa" de hacer. Tiene sentido si quieres hacer un programa bien organizado, si piensas que más adelante vaya a ser ampliado o vayas a reutilizar partes en otros programas. Puedes saltarte a la torera este tipo de distribución de clases si es un programa que cuando lo termines no vas a volver a tocar y tampoco tienes interés en reutilizar nada.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.