Java - Ayuda con jpanel

 
Vista:

Ayuda con jpanel

Publicado por Rocio (15 intervenciones) el 25/02/2021 00:20:50
Hola. Alguien me podría decir cómo hacer para poner dos Jpanel en una ventana? Nosé como hacer. Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con jpanel

Publicado por Kabuto (1382 intervenciones) el 27/02/2021 12:57:22
Hola.

No eres muy específica sobre qué quieres conseguir, pero vamos a ver unos ejemplos que quizás te ayuden.

Supongamos que a una ventana JFrame queremos agregarle dos paneles de distintos color para poder distinguirlos.

Si simplemente los "añadimos" (usando add() ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class DosPaneles extends JFrame{
 
	public DosPaneles() {
 
		JPanel panelRojo = new JPanel();
		panelRojo.setPreferredSize(new Dimension(300,  400));
		panelRojo.setBackground(Color.RED);
		JPanel panelVerde = new JPanel();
		panelVerde.setPreferredSize(new Dimension(300,  400));
		panelVerde.setBackground(Color.GREEN);
 
		add(panelRojo);
		add(panelVerde);
 
		setTitle("Dos paneles");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
 
	}
 
 
	public static void main(String[] args) {
		new DosPaneles();
	}
 
}

Pues no, no va a funcionar

imagen_2021-02-27_123802

Solo vemos el panel verde, el último que hemos añadido. ¿Por qué?
Porque por defecto el JFrame no incorpora ningún layout.

Un layout es el elemento que maqueta y organiza los componentes Swing en la interfaz. Si no hay ningún layout, nada se va a organizar ni maquetar.
Aquí lo que ocurre es que el último panel que añadimos, el verde, simplemente sustituye al rojo.


Así pues, necesitamos un layout. Por ejemplo, el más simple y básico de todos, el FlowLayout.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class DosPaneles extends JFrame{
 
	public DosPaneles() {
 
		JPanel panelRojo = new JPanel();
		panelRojo.setPreferredSize(new Dimension(300,  400));
		panelRojo.setBackground(Color.RED);
		JPanel panelVerde = new JPanel();
		panelVerde.setPreferredSize(new Dimension(300,  400));
		panelVerde.setBackground(Color.GREEN);
 
		setLayout(new FlowLayout());
		add(panelRojo);
		add(panelVerde);
 
		setTitle("Dos paneles");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
 
	}
 
 
	public static void main(String[] args) {
		new DosPaneles();
	}
 
}

Este layout lo que hace es maquetar los elementos Swing de forma horizontal y "flotando" en un sentido.
Si no especificamos nada, los elementos "flotan" desde el centro del contenedor , el JFrame en este caso.
Y ahora sí podemos ver ambos paneles.

imagen_2021-02-27_124446

Al constructor del FlowLayout, le podemos pasar algunas constantes para decidir hacía donde han de flotar los elementos.
Por ejemplo hacia la izquierda: setLayout(new FlowLayout(FlowLayout.LEFT));
O hacia la derecha: setLayout(new FlowLayout(FlowLayout.RIGHT));

Pero en este ejemplo tan simple de los dos paneles, no se apreciará diferencia.


FlowLayout siempre va a maquetar en horizontal.

Si quisieras maquetar en vertical, hay otros layout que puedes usar, como por ejemplo BoxLayout que si podemos escoger la orientación.
Para ello en su constructor tenemos que indicarle que contenedor se está aplicando el layout (para este ejemplo, hay que "getear" el contenedor del JFrame) y la orientación, si la queremos en el eje X (horizontal) o en el eje Y(vertical)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class DosPaneles extends JFrame{
 
	public DosPaneles() {
 
		JPanel panelRojo = new JPanel();
		panelRojo.setPreferredSize(new Dimension(300,  400));
		panelRojo.setBackground(Color.RED);
		JPanel panelVerde = new JPanel();
		panelVerde.setPreferredSize(new Dimension(300,  400));
		panelVerde.setBackground(Color.GREEN);
 
		setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		add(panelRojo);
		add(panelVerde);
 
		setTitle("Dos paneles");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
 
	}
 
 
	public static void main(String[] args) {
		new DosPaneles();
	}
 
}

Y ahora sí tenemos los paneles en vertical:

imagen_2021-02-27_125237


En Swing, es necesario e importante familiarizarse con los distintos layouts que hay disponibles. Al principio cuesta un poco porque no siempre se comportan como esperábamos.
Pero cuando nos acostumbramos a sus comportamientos, combinándolos entre ellos maquetar la interfaz es sencillo y no se necesita demasiadas líneas de código.

En muchos tutoriales suelen enseñar a maquetar sin layout (setLayout(null)) y colocar los elementos Swing con posiciones y dimensiones absolutas con setBounds()
Pero no es la práctica recomendable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar