Java - removeAll con varios paneles

 
Vista:
sin imagen de perfil

removeAll con varios paneles

Publicado por kanika (11 intervenciones) el 23/09/2021 19:27:38
Hola expertos!!
tengo una pestaña con varios paneles, los paneles tienen JTextField, JTextArea, JCheckBox, vamos un poco de todo.

Tengo un botón en uno de los paneles y lo que quiero es que me limpie todos los datos de todos los paneles a la vez, pero no me funciona, de hecho no sé si se puede hacer sin ir uno a uno.

Este es mi código:

//limpiamos todos los datos de todos los paneles
public class GestorLimpia implements ActionListener{
public void actionPerformed(ActionEvent l) {

PanelCentral().removeAll();
PanelCentral().repaint();
PanelCentral().revalidate();
PanelEste().removeAll();
PanelEste().repaint();
PanelEste().revalidate();
PanelOeste().removeAll();
PanelOeste().repaint();
PanelOeste().revalidate();

}
}

Gracias por vuestra 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

removeAll con varios paneles

Publicado por Kabuto (1381 intervenciones) el 24/09/2021 00:32:45
Yo siempre voy uno a uno.
De todos modos, prueba poniendo el repaint() después del revalidate()


1
2
3
PanelCentral().removeAll();
PanelCentral().revalidate();
PanelCentral().repaint();
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
sin imagen de perfil

removeAll con varios paneles

Publicado por kanika (11 intervenciones) el 24/09/2021 09:13:55
gracias Kabuto, lo he hecho y sigue sin hacernada.

N siquiera borra los datos del panel en el que está el botón por lo que no sé para que sirve el removeAll() si tengo que borrar los datos objeto a objeto......
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
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

removeAll con varios paneles

Publicado por Kabuto (1381 intervenciones) el 24/09/2021 11:48:02
Es que removeAll() no está pensado para "resetear formularios".
Su función es eliminar los componentes de un "contenedor" en la interfaz, para luego crear un nuevo diseño.

validate, o revalidate... lo que harían es validar los nuevos componentes que se añadan al contenedor.


Nunca he intentado usarlos con el propósito de resetear un formulario. A raíz de tu consulta, he estado haciendo pruebas con este código, donde con un botón hago un "remove" de unos campos de texto y con otro intento "revalidar" los componentes.
Así veo como afecta al contenedor cada acción por separado.

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
public class PruebaRemove extends JFrame {
 
	private JTextField campo1;
	private JTextField campo2;
	private JTextField campo3;
	private JButton btRemover;
	private JButton btRevalidar;
	private JPanel pnCampos;
	private JPanel pnBotones;
 
	public PruebaRemove() {
		campo1 = new JTextField(15);
		campo2 = new JTextField(15);
		campo3 = new JTextField(15);
		btRemover = new JButton("Remove");
		btRemover.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				pnCampos.removeAll();
			    pnCampos.repaint();
			}
		});
		btRevalidar = new JButton("Revalidate");
		btRevalidar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				pnCampos.revalidate();
				pnCampos.repaint();
			}
		});
 
		pnCampos = new JPanel();
		pnCampos.setLayout(new BoxLayout(pnCampos, BoxLayout.Y_AXIS));
		pnCampos.add(campo1); pnCampos.add(campo2); pnCampos.add(campo3);
		pnCampos.setBorder(new EmptyBorder(30, 30 , 30, 30));
 
		pnBotones = new JPanel();
		pnBotones.setLayout(new FlowLayout(FlowLayout.CENTER, 25, 0));
		pnBotones.add(btRemover); pnBotones.add(btRevalidar);
 
		setLayout(new BorderLayout());
		add(pnCampos, BorderLayout.CENTER);
		add(pnBotones, BorderLayout.SOUTH);
 
		setTitle("Remove");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new PruebaRemove();
			}
		});
	}
}

Pero lo único que consigo es que los campos de texto desaparezcan y no regresen.
He probado distintas acciones, en diferentes combinaciones.. y nada.

Incluso si en lugar de revalidar, vuelvo a añadir los campos, estos siguen conservando el texto que tenían escrito, lo cuál ya me lo esperaba.

1
2
3
4
5
6
7
8
btRevalidar = new JButton("Revalidate");
		btRevalidar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				pnCampos.add(campo1); pnCampos.add(campo2); pnCampos.add(campo3);
				pnCampos.repaint();
			}
		});


Así que no se si es posible resetear un formulario de esta forma. En cualquier caso, ya digo que no es esa su función.
Java nos da muchas cosas ya hechas, pero no todo... No olvidemos que los programadores somos nosotros, y si queremos resetear los campos de texto de un formulario, pues habrá que ir uno por uno y hacerles setText(null)

Eso sí, tu duda es interesante. Si descubres algo más, háznoslo saber.
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
sin imagen de perfil

removeAll con varios paneles

Publicado por kanika (11 intervenciones) el 24/09/2021 12:00:05
Muchísimas gracias por tu tiempo y tu aclaración.

Lo he hecho limpiando objeto a objeto, era por si se podía usar un atajo pero veo que no .

Muchísimas gracias!!
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