Java - Mas logica que java - dos botones JToggledButton

 
Vista:
Imágen de perfil de Juan

Mas logica que java - dos botones JToggledButton

Publicado por Juan (6 intervenciones) el 20/10/2016 22:47:32
Hola a todos, antes que nada aclaro que el ejercicio muy basico que tengo que hacer
se podria hacer tranquilamente con un checkbox jcombobox y otros componentes...
Pero pasa mas que nada por entender la logica en este caso usando JToggledButton.

Tengo que tener dentro de un JPannel 2 JToggledButton.
Cada vez que se pulsa uno los otros tiene que quedar en isSelected(false)
Bien, ahora si uno que esta pulsado, se vuelve a pulsar TODOS tienen que quedar
en isSelected(false).
Como si fuesen palancas, la logica tiene que funcionar para 2 botones o para cien.

El codigo es este pero pero si presiono TRES veces el mismo boton cualquiera sea, la tercera no queda presionado.
A alguien se le ocurre algo u otro diseño...

parece mucho codigo pero es muy basico ;)


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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
 
public class PruebaPalancas extends JPanel{
 
	public static void main(String [] args){
 
		JFrame miVentana = new JFrame();
 
		Palancas misPalancas = new Palancas();
 
		miVentana.add(misPalancas);
		miVentana.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		miVentana.setLocationRelativeTo(null);
		miVentana.pack();
		miVentana.setVisible(true);
 
	}
 
}
 
class Palancas  extends JPanel{
 
	int contador = 0; // verifica si es la primera vez que se entra al bucle
	boolean bSelect = false; //verifica si el boton fue presionado o no.
 
	JToggleButton palanca1 = new JToggleButton("palanca1");
	JToggleButton palanca2 = new JToggleButton("palanca2");
 
	JToggleButton ultimo = new JToggleButton();
 
	public Palancas(){
 
		JPanel pruebaPanel = new JPanel();
		pruebaPanel.setLayout(new GridLayout(7,1,5,5));
		JTBEvento jtbEvento = new JTBEvento(); // JTB JToggleButton :)
 
			palanca1.addActionListener(jtbEvento);
			palanca2.addActionListener(jtbEvento);
 
			pruebaPanel.add(palanca1);
			pruebaPanel.add(palanca2);
 
 
			this.add(pruebaPanel,BorderLayout.CENTER);
 
	}
 
	class JTBEvento implements ActionListener{
 
			public void actionPerformed(ActionEvent e){
 
				System.out.println(contador + " " + bSelect); // 
 
				if(contador == 0){ //significa que todos los botones NO estaban presionados y hay chequear cual esta ahora
 
					bSelect = palanca1.isSelected();
					if(palanca1.isSelected()){
 
						System.out.println("Palanca1" + " " + bSelect);
						contador++;
						ultimo = palanca1;
 
					}
 
					bSelect = palanca2.isSelected();
					if(palanca2.isSelected()){
 
						System.out.println("Palanca2" + " " + bSelect);
						contador++;
						ultimo = palanca2;
 
					}
 
			}else{
 
					ultimo.setSelected(false);
 
					// System.out.println(((JToggleButton) e.getSource()).getName() + " objeto");
 
					bSelect = palanca1.isSelected();
					if(palanca1.isSelected()){
 
						System.out.println("Palanca1" + " " + bSelect);
						contador++;
						ultimo = palanca1;
 
					}
 
					bSelect = palanca2.isSelected();
					if(palanca2.isSelected()){
 
						System.out.println("Palanca2" + " " + bSelect);
						contador++;
						ultimo = palanca2;
 
			}
 
		} //cierre de listener
 
 
	}
 
	}
}
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 Juan

Mas logica que java - dos botones JToggledButton

Publicado por Juan (6 intervenciones) el 22/10/2016 23:11:56
Hola Pequeño Rafa, te paso una posible solucion, la veo poco elegante
codigo un poco engorroso, abuso de if (en el caso de que hayan muchos botones), pero funciona.
Lo ideal seria hacer algo recursivo con menos lineas pero por ahora es lo que hay.
Lo bueno que te sirve con cualquier componente que tenga dos estados.
Slds!!


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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
public class PruebaPalancas extends JPanel{
 
	public static void main(String [] args){
 
		JFrame miVentana = new JFrame();
 
		Palancas misPalancas = new Palancas();
 
		miVentana.add(misPalancas);
		miVentana.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		miVentana.setLocationRelativeTo(null);
		miVentana.pack();
		miVentana.setVisible(true);
 
	}
 
}
 
class Palancas  extends JPanel{
 
	JToggleButton palanca1 = new JToggleButton("palanca1");
	JToggleButton palanca2 = new JToggleButton("palanca2");
 
	JToggleButton ultimoBoton;
 
	public Palancas(){
 
		JPanel pruebaPanel = new JPanel();
		pruebaPanel.setLayout(new GridLayout(7,1,5,5));
		JTBEvento jtbEvento = new JTBEvento();		// JTB	= JToggleButton
 
		palanca1.addActionListener(jtbEvento);
		palanca2.addActionListener(jtbEvento);
 
		pruebaPanel.add(palanca1);
		pruebaPanel.add(palanca2);
 
			this.add(pruebaPanel);
 
	}
 
	class JTBEvento implements ActionListener{
 
			public void actionPerformed(ActionEvent e){
 
				int botonesPulsados  = 0;
 
					if(palanca1.isSelected()){botonesPulsados++;}
					if(palanca2.isSelected()){botonesPulsados++;}
 
				if(botonesPulsados == 0){ultimoBoton = null;}
 
				if(botonesPulsados == 2){
 
					if(palanca1.isSelected()){
						if(palanca1 == ultimoBoton){
							System.out.println("Ultimo boton presionado: Palanca1 ");
							palanca1.setSelected(false);
							botonesPulsados = 1;
						}
					}
 
					if(palanca2.isSelected()){
						if(palanca2 == ultimoBoton){
							System.out.println("Ultimo boton presionado: Palanca2");
							palanca2.setSelected(false);
							botonesPulsados = 1;
						}
					}
				}
 
				if(botonesPulsados == 1){
 
					if(palanca1.isSelected()){
						System.out.println("Palanca1 Presionada");
						ultimoBoton = palanca1;
					}
 
					if(palanca2.isSelected()){
						System.out.println("Palanca2 Presionada");;
						ultimoBoton = palanca2;
					}
				}
 
		} //cierre del actionPerformed
 
	} // cierre del actionListener
}
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