Java - Mostrar el contenido de un arraylist en un JTextArea

 
Vista:

Mostrar el contenido de un arraylist en un JTextArea

Publicado por Juan (35 intervenciones) el 05/03/2021 21:40:11
Buenas, estoy intentando mostrar unos datos en un jtextarea y no consigo hacerlo, no entiendo que estoy haciendo mal, necesito mostrar el contenido de un arraylist

El codigo es el siguiente

1
2
3
4
5
6
7
8
9
10
11
public void mostrar() {
 
    frame.setContentPane(panel);
    panel.setVisible(true);
    panel.setLayout(null);
    for (int i=0;i<Array.size(); i++) {
        textArea.append("Elemento numero: "+ i);
        textArea.append("Contenido: "+ Array.get(i));
        panel.add(textArea);
 
    }

Ayuda
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

Mostrar el contenido de un arraylist en un JTextArea

Publicado por Kabuto (1381 intervenciones) el 06/03/2021 12:02:20
Pero, ¿qué falla?
¿No salen los datos en el area texto?
¿No sale el área texto en la interfaz?

Veo que a panel le pones layout(null)
1
panel.setLayout(null);

Consejo: considera el setLayout(null) como tu peor enemigo.
Se que cuando enseñan a crear interfaces con Swing, es lo primero que explican, aplicar setLayout(null). Bien, pues es un error mayúsculo y debería estar perseguido y castigado por todos los tribunales de derechos humanos ja ja..

Fuera bromas, el setLayout(null) solo debería usarse en casos muy concretos, yo de hecho nunca lo uso.

El layout es un gestor que decide cómo se maquetan y muestran los elementos de la interfaz. Si quitas el layout, no hay nadie decidiendo cómo se muestran las cosas. Y por tanto, no se muestran.
A no ser que lo decida el programador, usando setBounds() para indicar posiciones y tamaños absolutos.
Pero insisto que es un error, cuando Swing ofrece distintos layouts para maquetar automáticamente.

Yo probaría a quitar esa línea donde nulleas el layout, simplemente bórrala y deja activo el layout que el panel traerá por defecto

Otro fallo que veo , es que añades el area de texto dentro del bucle que recorrer el array
1
2
3
4
5
6
for (int i=0;i<Array.size(); i++) {
        textArea.append("Elemento numero: "+ i);
        textArea.append("Contenido: "+ Array.get(i));
        panel.add(textArea);
 
    }

Esto significa que si por ejemplo el array tiene 25 elementos, vas a añadir el área de texto 25 veces.

Es más, lo normal es que las acciones de "añadir el area de texto" y "mostrar elementos en el area" fueran acciones separadas unas de otras.
Como no tenemos tu programa completo, pues no se exactamente como quieres o esperas que funcione la interfaz. Pero lo habitual es que al comenzar el programa el área de texto ya esté en la interfaz, porque se ha añadido mientras se construía el JFrame principal.

Luego, desde un botón por ejemplo, se ejecutaría la acción de recorrer el ArrayList y enviar los datos al area de texto.

Si no tenías planeado usar ningún botón, si no hacer que directamente se muestren los elementos, simplemente deja fuera del bucle la línea donde añades el area al panel.
Da igual si lo pones antes del bucle que recorre elementos, o lo pones después. Lo importante es que esté FUERA del bucle

Te dejo aquí un ejemplo rápido que he escrito.
Tenemos un ArrayList con nombres y un JFrame que se compone de dos paneles.
Un panel contiene el area de texto y el otro un botón.
Fíjate que no intervengo en su layout, dejo el que todo panel trae por defecto, el FlowLayout.

Luego esos paneles los inserto en el JFrame principal, a quién sí le intervengo su layout. Le establezco un BorderLayout, quien divide la interfaz en 5 partes: centro, norte, sur, este y oeste.
Así en el "centro" pongo el panel que tiene el area de texto.
Y en el "sur", o sea, la parte inferior, pongo el panel que tiene el botón.

Cuando se pulsa el botón, se recorre el ArrayList y se envía lo que contiene al area de texto.


imagen_2021-03-06_114036


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class MostrarArrayList extends JFrame{
 
	private ArrayList<String> listaNombres;
	private JTextArea area;
	private JButton btMostrar;
 
	public MostrarArrayList() {
 
		crearNombres();
 
		setLayout(new BorderLayout());
		add(new PanelArea(), BorderLayout.CENTER);
		add(new PanelBoton(), BorderLayout.SOUTH);
 
		setTitle("Mostrar Array en Area");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private void crearNombres() {
		listaNombres = new ArrayList<String>();
		listaNombres.add("Sara");
		listaNombres.add("Javier");
		listaNombres.add("Maria");
		listaNombres.add("Luis");
		listaNombres.add("Antonio");
		listaNombres.add("Cristina");
		listaNombres.add("Felipe");
		listaNombres.add("Alicia");
		listaNombres.add("Laura");
		listaNombres.add("Eva");
	}
 
	private class PanelArea extends JPanel {
 
		public PanelArea() {
			area = new JTextArea(12, 20);
			add(area);
			setBorder(BorderFactory.createCompoundBorder(
					BorderFactory.createEmptyBorder(25,30,25,30),
					BorderFactory.createTitledBorder("Lista de Nombres")));
		}
	}
 
	private class PanelBoton extends JPanel {
 
		public PanelBoton() {
			btMostrar = new JButton("Mostrar");
			btMostrar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					area.setText(null); //Limpiamos area texto
					for (int j = 0; j < listaNombres.size(); j++) {
						area.append("Elemento: " + j + " -- > ");
						area.append(listaNombres.get(j) + "\n");
					}
				}
			});
 
			add(btMostrar);
		}
	}
 
	public static void main(String[] args) {
		new MostrarArrayList();
	}
 
}


Espero que te sirva de ayuda.
Un saludo
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