Creación dinámica de jButtons/Buttons

Iniciado por NelxoN, 27 Diciembre 2010, 00:02 AM

0 Miembros y 2 Visitantes están viendo este tema.

visualfree

Estimado:

Junto con saludarte, te dejo un pequeño ejemplo que he realizado, espero te sirva.

Acá te dejo 3 images que demuestran el resultado de este código:

http://imageshack.us/photo/my-images/10/capturadepantalla201304tq.png/
http://imageshack.us/photo/my-images/43/capturadepantalla201304p.png/
http://imageshack.us/photo/my-images/22/capturadepantalla201304fm.png/



Creacion Bdd:

create database ejemplo1;
use ejemplo1;
create table  mesa(
idMesa int(10) primary key not null auto_increment,
numero int(250),
estado varchar(250));


Codigo Conexion a bdd:

package MysqlConec;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class conexión {
private String bdd="ejemplo1";
private String usuario="root";
private String clave="123456";
private Connection con;
private Statement stmt;
private ResultSet rs;
public conexión()
{
try{
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
con=DriverManager.getConnection("jdbc:mysql://localhost/"+bdd,usuario,clave);
}catch(Exception e)
{
e.printStackTrace();
}
}
public void setExecuteUpdate(String sql){
try{
stmt=con.createStatement();
stmt.executeUpdate(sql);
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
public void setExecuteQuery(String sql){
try{
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
}catch(SQLException ex)
{
ex.printStackTrace();
}
}
public ResultSet getRs() throws SQLException
{
return rs;
}

}




Codigo Aplicacion:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import MysqlConec.conexión;
import java.io.*;

public class Programa {
public static void main(String[] args){
Ventana v=new Ventana();
v.setVisible(true);

}
}
class Ventana extends JFrame{
public Ventana(){
this.setTitle("Ejemplo Mesas");
this.setSize(500,500);
MiPanel p=new MiPanel();
this.add(p);
}
}
class MiPanel extends JPanel{
private JButton[] mesa;
private JPanel pnNorte=new JPanel();
private JPanel pnCentro=new JPanel();
private JLabel lblMesa=new JLabel("Administrar");
private JComboBox comboMesa=new JComboBox();{
comboMesa.addItem("Abierta");
comboMesa.addItem("Cerrada");
}
private JButton btnMostrar=new JButton("Mostrar Mesas");
private conexión con=new conexión();

public MiPanel(){
pnNorte.setLayout(new GridLayout(1,3));
pnNorte.add(lblMesa);
pnNorte.add(comboMesa);
pnNorte.add(btnMostrar);

this.setLayout(new BorderLayout());
this.add(pnNorte,BorderLayout.NORTH);
this.add(pnCentro,BorderLayout.CENTER);
OyenteBuscar oBuscar=new OyenteBuscar();
btnMostrar.addActionListener(oBuscar);
}
public void crearMesas(int cantidad){
pnCentro.removeAll();
pnCentro.repaint();
pnCentro.setLayout(null);
mesa=new JButton[cantidad];
//JOptionPane.showMessageDialog(null,cantidad);
int x=0;
for(int i=0;i<cantidad;i++){

mesa[i] = new JButton("Mesa"+i);
if(i < 5){// 5 Mesas

mesa[i].setBounds(20+i*110, 20, 100, 100);
pnCentro.add(mesa[i]);
pnCentro.repaint();
}
else if(i>=5){//10 Mesas
mesa[i].setBounds(20+x*110, 130, 100, 100);
pnCentro.add(mesa[i]);
pnCentro.repaint();
x=x+1;
}
else if(i>=10){//15 Mesas
mesa[i].setBounds(20+x*110, 130, 100, 100);
pnCentro.add(mesa[i]);
x=x+1;
}

}
}
class OyenteBuscar implements ActionListener{
public void actionPerformed(ActionEvent e){
String estado=comboMesa.getSelectedItem().toString();
try{
con.setExecuteQuery("select count(idMesa) as total from mesa where estado='"+estado+"'");
while(con.getRs().next()){
int numer=con.getRs().getInt("total");
crearMesas(numer);
}
}catch(Exception ex)
{

}

}
}
}


Atento a tus comentarios.

Saluda Atte.


JacobJankowski

Hola buenas tardes

Gracias por responder a ambos, Sapito169:
Al crear el bucle de la nueva clase de AccionEscogioMesa, solamente me agrega una sola mesa abierta de todas las que se tienen, esto hace que los botones no se agregen de acuerdo al conteo de las mesas que se obtienen, y por lógica no me muestra la información total de estas.... sigue siendo funcional al agregar el boton y dar clic sobre el y que me muestre un mensaje con el numero de la mesa que selecciono... si entiendo que al indicar dentro del while
btnMesa=new JButon(...)

se agregarán las mesas que tenga en botones nuevos y que tal vez ahi se encuentre mi error por que no indico un actionlistener por cada boton, pero si le quito el
btnMesa
                   .addActionListener(new AccionEscogioMesa(rs.getString("mesa")));

y dejandolo sin que instancie la nueva clase de AccionEscogioMesa, si muestra el numero de mesas en los botones pero me sigue dando la misma circunstancia...



Visual Free, tu codigo esta perfectamente amoldable, el punto es que como me trato de explicar es que al dar clic en cada boton de la mesa que se encuentre abierta, quiero que me muestrre un mensaje con el numero de mesa que estoy pinchando..

saludos