Foro sobre Java SE > Hay alguna forma de usar una serie deJtoggleButton sin necesidad de muchas condiciones
Hola, no entiendo muy bien lo que quieres hacer, pero creo que es algo así:
- Un panel donde tienes varios productos de los que puedes escoger uno o más.
- Luego un panel donde elijes la cantidad de procuctos (según veo en la imágen la cantidad es la misma para todos los productos seleccionados, no diferentes cantidades para los diferentes productos; esto no me quedó claro).
- Cada producto tiene su propio precio.
Pues bien, si es más o menos lo que pretendes, se me ocurre que puedas hacer lo
siguiente:
A cada botón le asocias un objeto de una clase Producto el cual contiene información sobre dicho producto - el precio, por ejemplo. Esto lo puedes conseguir mediante el ButtonModel de cada JToggleButon. Así que lo que hacemos es crear nuestro propio model que guarde un objeto Producto. Para no hacer un model por completo, lo que hacemos es crear una clase derivada de DefaultButtonModel, ago así:
class MyModel extends DefaultButtonModel {
private Producto producto;
public MyModel(Producto pr) {
this.producto = pr;
}
public Producto getProducto() {
return producto;
}
}
... y la clase Producto:
class Producto {
private String nombre;
private int precio;
public Producto(String nombre, int precio) {
this.nombre = nombre;
this.precio = precio;
}
public int getPrecio() {
return precio;
}
La forma de establecer el modelo a nuestros botones sería así:
// Ejemplo:
JToggleButton btn = new JToggleButton();
btn.setModel(new MyModel(new Producto("Combo 1", 2)));
Luego, a la hora de hacer el pedido, examinar cada botón presionado del panel donde se encuentran para obtener el model y de éste el objeto Producto y su valor.
public int pedir(JPanel panelProductos, int cantidad) {
int total = 0;
for (int i = 0; i < panelProductos.getComponentCount(); i++) {
// Obtenemos cada toggleButton del panel
JToggleButton btn = (JToggleButton) panelProductos.getComponent(i);
// y el model que hicimos para obtener el precio del producto
// relacionado con el botón
MyModel model = (MyModel) btn.getModel();
if (model.isPressed()) {
total += model.getProducto().getPrecio() * cantidad;
}
}
return total;
}
Otra cosa, deacuerdo con lo que entendí, querrás que sólo se pueda estar presionado un botón a la vez del panel de cantidades. Esto lo logras mediante un ButtonGroup, agregando todos los botones al mismo de la siguiente forma:
ButtonGroup gr = new ButtonGroup();
btn1.getModel().setGroup(gr);
btn2.btn.getModel().setGroup(gr);
Y para obtener el model del seleccionado:grupo.getSelection();
Espero te sea de ayuda.
Buenos días amigos de JavaHispano.
Actualmente me encuentro desarrollando un software de pedidos para un restaurante en java.
Voy a ir directamente al grano, el funcionamiento es simple, se selecciona un producto, una cantidad y se agrega al pedido, todo esto con toggleButtons, el problema es que dependiendo de los botones que estén seleccionados, el valor será diferente.
La única forma que se me ocurre es hacer un montón de condiciones( aproximadamente 150) donde mire que botón está seleccionado y a partir de allí tome los valores correspondientes. No sé si hay alguna forma en que no tenga necesidad de hacer tantas condiciones.
Les dejo una imagen en el siguiente link en la cual podrán ver la interfaz de lo que pretendo.
ImagenInterfazPedidos