| 
	
		|  Autor | Tema: Mas logica que java - dos botones JToggleButton  (Leído 2,172 veces) |  
	| 
			| 
					
						| Juanfernandez0032 
								
								 Desconectado 
								Mensajes: 6
								
								   | 
 
Hola a todos, antes que nada aclaro que el ejercicio muy basico que tengo que hacerse 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 JPanel 2 JToggleButton.
 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   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();
 
 palanca1.addActionListener(jtbEvento);
 palanca2.addActionListener(jtbEvento);
 
 pruebaPanel.add(palanca1);
 pruebaPanel.add(palanca2);
 
 
 
 this.add(pruebaPanel);
 
 }
 
 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
 
 
 }
 
 }
 }
 
 
 
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Juanfernandez0032 
								
								 Desconectado 
								Mensajes: 6
								
								   | 
 
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!!
 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
 }
 
 
 
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Aspectos de botones y ventanas java Java
 | AsTeroine | 7 | 14,659 |  12 Agosto 2009, 01:08 am por 1mpuls0
 |  
						|   |   | Logica en programacion Java Script Programación General
 | ivesorm | 1 | 4,314 |  16 Febrero 2011, 14:35 pm por Ferno
 |  
						|   |   | botones en java Java
 | Grey_Area | 2 | 3,410 |  29 Noviembre 2011, 23:09 pm por Grey_Area
 |  
						|   |   | Botones JAVA Java
 | jemiesro | 2 | 2,995 |  14 Junio 2013, 11:23 am por Slider324
 |  
						|   |   | Botones redondos java. AYUDA! Java
 | MC.cover | 3 | 4,485 |  19 Enero 2016, 22:25 pm por 0xFer
 |    |