Autor
|
Tema: Mas logica que java - dos botones JToggleButton (Leído 1,912 veces)
|
Juanfernandez0032
Desconectado
Mensajes: 6
|
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 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,136
|
12 Agosto 2009, 01:08 am
por 1mpuls0
|
|
|
Logica en programacion Java Script
Programación General
|
ivesorm
|
1
|
4,017
|
16 Febrero 2011, 14:35 pm
por Ferno
|
|
|
botones en java
Java
|
Grey_Area
|
2
|
3,231
|
29 Noviembre 2011, 23:09 pm
por Grey_Area
|
|
|
Botones JAVA
Java
|
jemiesro
|
2
|
2,773
|
14 Junio 2013, 11:23 am
por Slider324
|
|
|
Botones redondos java. AYUDA!
Java
|
MC.cover
|
3
|
4,201
|
19 Enero 2016, 22:25 pm
por 0xFer
|
|