Java - Problemas en la optimización de mi código

 
Vista:
sin imagen de perfil

Problemas en la optimización de mi código

Publicado por Dani (2 intervenciones) el 09/11/2021 14:02:57
Buenos días comunidad. Intentaré ser breve en la explicación:
Estoy intentando optimizar un código. En está optimización quiero crear 9 botones mediante un método ( que recibe como parámetros un objeto botón, nombre, y un ActionListener).
Una vez creados y añadidos al JPanel; quería desarrollar la interfaz ActionListener para que cuando pulso un botón especifico cambie el texto-nombre predefinido inicialmente por un a X en la interfaz gráfica.
Les adjunto imagenes del código.(Está el especifico a la pregunta que les hago).
1
2
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

Problemas en la optimización de mi código

Publicado por Kabuto (1102 intervenciones) el 09/11/2021 19:52:47
Hola.

Creo que es más óptimo si creas directamente una nueva clase que herede de JButton, y además, implemente el ActionListener
Por constructor le pasas el número que ha de mostrar inicialmente.
En el método actionPerformed(), ya no hará falta preguntar que botón se ha pulsado, porque cada botón ahora podrá actuar sobre sí mismo, así que solo hay que ordenar que cambie su texto por la X

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class BotonX extends JButton implements ActionListener {
 
	public BotonX(String num) {
		super(num);
		setPreferredSize(new Dimension(50, 30));
		addActionListener(this);
	}
 
	@Override
	public void actionPerformed(ActionEvent e) {
		setText("X");
	}
 
}

Aquí pongo un JFrame para probar el botón.
Con un array de 9 botones y un bucle, se pueden inicializar y agregar a la interfaz en unas pocas líneas.

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
public class Prueba extends JFrame {
 
	private BotonX[] botonera;
 
	public Prueba() {
 
		botonera = new BotonX[9];
 
		JPanel pnBotones = new JPanel();
		pnBotones.setLayout(new GridLayout(1,9,5,5));
 
		for (int i = 0; i < 9; i++) {
			botonera[i] = new BotonX(Integer.toString(i+1));
			pnBotones.add(botonera[i]);
		}
 
		pnBotones.setBorder(new EmptyBorder(15,15,15,15));
 
		setContentPane(pnBotones);
 
		setTitle("Prueba Botones");
		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 Prueba();
			}
		});
	}
 
}

Nos da este resultado en pantalla, donde vemos que cada botón se encarga de cambiar su texto por una x
imagen_2021-11-09_195149
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

Problemas en la optimización de mi código

Publicado por Dani (2 intervenciones) el 09/11/2021 20:03:49
Realmente interesante la solución que me aportas.... Me has abierto una lógica ( que por mi desconocimiento no me había planteado). Voy a revisar arduamente tú solución e implementarla al proyecto.

Iré comentando si finalmente lo he solucionado.

Muchas gracias .
PD:
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