Duda JPanel (con fotos)

ReBeNTuk0

Buenas!Estoy haciendo una aplicacion sobre una pizzeria y me gustaria hacer algo parecido a esto:

http://img508.imageshack.us/my.php?image=35517576ls3.jpg

http://img210.imageshack.us/my.php?image=33760156xb8.jpg

Estoy utilizando NetBeans, pero no se como bien como realizarlo. Si poner un panel y luego encima otros y ocultar todos menos el primero e irlos visualizando poco a poco o no se.

Por ahora, me creo un simple JFrame y le añado un JPanel (no utilizo ninguno Layout ni nada de nada, lo dejo por defecto) para el fondo y ya esta. Ademas, el NetBeans cada vez que muevo algun componente me mueve muchas veces los demas componentes y no se como desactivar eso tampoco :S Espero que me podais ayudar, gracias.

erdanblo

Para que el Netbeans no te ajuste los componentes, creo que era donde pone Layouts, clicqueas con el 2º y le das a una de las opciones (Free algo creo que era).

No estoy muy seguro porque no tengo ahora mismo el Netbeans.

ReBeNTuk0

Asi es como viene por defecto, el diseño libre o layout free pero aun asi lo ajusta como le da la gana :(

erdanblo

Prueba, que era una de las opciones.

erdanblo

smintcs

null layout te permite poner todo donde quieras y no lo alinea ni nada similar

ReBeNTuk0

Con el null layout me las estoy apañando!!! gracias a los dos!!!

Sr_RoS

lo malo del null layout es que si cambia la resolución de pantalla te toca re ordenar los componentes

Cyph3r

Null layout no lo utilizes. Utiliza GridBagLayout es el mejor.

Con ese layout se pueden hacer muchísimas cosas , por ejemplo la interfaz de mi reproductor de música fue hecha con GridBagLayout.

ReBeNTuk0

Mi problema es a la hora de cargar muchos JPanel. En esta primera foto, a la derecha que pone "Espacio Reservado para los Elementos de Grupo" es un JLabel y es visible si no hay ningun boton de arriba pulsado. A partir de aqu,i en funcion de si pulso en "Pizzas", "Latas", etc me carga un JPanel distinto.

http://img205.imageshack.us/my.php?image=18177950ru2.jpg

Esto es lo que saldria al pulsar en "Pizzas":

http://img81.imageshack.us/my.php?image=81616188qh3.jpg

Por ahora lo estoy haciendo con el Null Layout, y es verdad que con otra resolucion cascaria :(
No se bien como continuar, ya que de las distintas formas que he pensado no me terminan de gustar. Por ahora, si pongo el JLabel de fondo y un solo panel, al iniciar la aplicacion lo pongo que no sea visible y al darle a Pizzas por ejemplo que se haga visible. Habia pensado poner todos los paneles uno encima de otro y que se hagan visible segun los necesite, lo que pasa, que si pongo el JPanel2 encima del JPanel1 por ejemplo, el JPanel2 se autoagrega al JPanel1 y no se como desactivar esto :S

Otra forma que he pensado, es utilizar un JTabbedPane, que ahi lo podria hacer sin problema, pero he buscado y no he encontrado la forma de que las pestañas desaparezcan, asi que mientras no pueda no lo usare, aunque es lo mas facil para cargar paneles sin mas.

Y la ultima forma que he pensado, aunque no me sale, es utilizar un JPanel y dentro de este ir cargando los demas JPanel en funcion de me vayan haciendo falta. Esto JPanel estarian en otras clases, pero cuando intento añadirlo, no me deja. Lo hago asi:

JPanel jPanel1 = new JPanel(); // Esto me lo hace el netbeans y algo mas
MasaPizza panel1 = new MasaPizza(); // MasaPizza es una clase JPanel
jPanel1.add(panel1); // No me da error pero no me muestra nada

A ver si me podeis echar una manita. Gracias! Por cierto, para tantos paneles, ¿va bien el GridBagLayout?

PD: Acabo de probar añadir el GridBagLayout al diseño que era nulo y si no toco nada de nada al cambiar de resolucion se ve bien. Asi que diseñare todo con null y al final del todo lo cambiare a gridbaglayout.

smintcs

Por partes, el grid layout lo que hace es dividir el espacio que hay en las partes que le digas y adaptar los componentes a esas porciones, si cambias el tamaño se adaptan.

El gridbaglayout hace algo parecido pero bastante mas complejo, puedes poner que las cosas ocupen filas enteras o columnas y combinaciones muy curradas.

Para lo que quieres hacer lo que mejor te viene es el Cardlayout, este es un layout que te permite de un conjunto de 10 paneles, mostrar solo el que tu quieras, no tienes que andar con mostrar ocultar cada uno, tu dices cual quieres que se muestre y los demas se ocultan, no tiene pestañas ni nada.

Un ejemplo podría ser (habiendo declarado layoutContenido como Cardlayout a null):

private JPanel getPanelContenido() {
	if (panelContenido == null) {
		panelContenido = new JPanel();
		layoutContenido = new CardLayout();
		panelContenido.setLayout(layoutContenido);
		panelContenido.add(getPanelCargando(), "panelCargando");
		panelContenido.add(getPanelClientes(), "panelClientes");
		panelContenido.add(getPanelProductos(), "panelProductos");
		panelContenido.add(getPanelFacturas(), "panelFacturas");
		panelContenido.add(getPanelAlbaranes(), "panelAlbaranes");
		panelContenido.add(getPanelProveedores(), "panelProveedores");
	}
	return panelContenido;
}

En cada add pasas el panel, y el nombre que quieres ponerle, luego en el actionperformed del boton va:

	layoutContenido.show(panelContenido, "panelAlbaranes");

que es el panel en el que quieres mostrarlo, es decir, el panel contenedor, y el nombre del panel que quieres activar.

Tendrías un panel para cada sección de pizza y todo eso, y luego puedes poner uno general que sera el que actives al principio.

No se si habrá sido muy claro pero siempre puedes buscar un poco mas sobre el Cardlayout.

ReBeNTuk0

Parece que el CardLayout es lo mas recomendable por lo menos para la parte esa que tengo que ir cambiando de paneles, tendre que estudiarmela. ¿Sabes si se pueden cargar jPanel de una clase a parte? Asi seria mas facil! Gracias

Cyph3r

Con swing puedes hacer que cada componente se dibuje solo y su visibilidad no tiene que contenerla un jpanel.

Tu crea un unico jpanel y le metes los elementos que quieras y luego cambias la visibilidad de los elementos en función de lo que aprietes.

ReBeNTuk0

No se muy bien a que te refieres. Por ejemplo, si creo en un jpanel a parte que no sirva nada mas que para diseñar y ahi creo la parte de Pizzas por ejemplo y lo pego en el jpanel que si usare realmente y asi con todos los botones y eso y luego como lo he pegado todo en un mismo panel, jugar con la visibilidad de cada componente?

Leunamal

#9 +1. Yo en mi pfc uso mucho el gridbaglayout. Cuando quiero meter varios componentes y quiero que el fondo sea transparente uso los containers. Tambien puedes "jugar" con las separaciones entre componentes usando Insets.

Cyph3r

Por ejemplo creas un public static JTextField campoUsuario = new JTextField(15);

luego con el método setVisible puedes jugar con la visibilidad.

Primero crear los componentes y luego los metes en el frame.

Usuarios habituales

  • Cyph3r
  • Leunamal
  • ReBeNTuk0
  • smintcs
  • Sr_RoS
  • erdanblo