Creación dinámica de jButtons/Buttons

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

0 Miembros y 1 Visitante están viendo este tema.

NelxoN

Mi duda es algo sencilla de explicar.

Resullta que tengo que diseñar una aplicación que administre las mesas de un restaurante, es decir, controlar los pedidos que tiene cada una, monto consumido, y todo lo demás y para ello tengo una base de datos donde guardo la cantidad de mesas que dispongo. Lo que quiero hacer es crear dinámicamente un jButton por cada valor que me devuelva de la base de datos (sé perfectamente como hacer las consultas, la duda es como hacer que me cree un jButton por cada mesa que encuentre).

Por ejemplo:
En mi base de datos, tengo una tabla llamada "mesas" donde solo tengo los campos "número" y "estado".

Citarnúmero     estado
1              Abierta
2              Abierta
3              Abierta
4              Abierta
5              Abierta

Por lo que quiero que la aplicación me creara 5 jButtons, no se si me explico.

En esta imagen pueden ver mas o menos mi idea:
http://images.quebarato.com.br/photos/big/1/5/1ED415_1.jpg
Salu2.

PD: Es probable que lo que estoy preguntando no sean exactamentos jButtons, desconozco si haya otra manera de dibujar/crear esos botones.

sapito169

si se puede divujar en java pero seria demasiado problema sin sentido

solo numero y estado estas seguro que diseñaste bien tu base de datos lo mas probable es que tenga errores
el campo estado es un campo calculado esta ocupando espacio en la base de datos por las puras

deberia ser

Orden
ordenid
mozoid
cajeroid
fechacreado
mesa
fechacobrado

estas mostrando 2 ventanas principales solo deve haber una con varias secundarias

crear botones para mezas en tiempo de ejecuacion tiene muchas desventajas estas obligado a usar el raton ocupa demasiado de la pantalla no muestra suficiente informacion para lo que ocupa ocupa en memoria innecesaria gasta casi toda la pantalla

mejor pon una tabla que muestre tus mezas abiertas pero con informasion mas relevanto como por ejemplo el mozo que lo atiende el precio total

si despues de todo quieres poner botones
para crear barios botones seria algo como


panelbotones.setlayaut(new GridLayout(10,9))



for (int numero=1;numero<=90;numero++){
agregarBoton(new JButon(numero));
}





pubic void agregarBoton(Jbuton btn){
panelbotones.add(btn)
}

sapito169

deberia ser algo parecido a esto o mejor

<script src='http://img834.imageshack.us/shareable/?i=meza.jpg&p=tl'; type='text/javascript'></script><noscript></noscript>

NelxoN

El detalle es que la aplicación la estoy diseñando pensando en la comodidad del usuario final. Si es cierto que ocupa mucho espacio en pantalla pero el restaurante que me pidió la aplicación tiene un touch screen y para efectos de rapidez es más fácil tocar en la pantalla el botón de la mesa que quiere abrir que cualquier otra cosa.

Salu2.

almensilla

No se si sera lo que buscas pero ahi va:

Si dices que puedes hacer la consulta a la bd sin problemas, lo que tendrias que hacer seria, un for para recorrer el numero de mesas que hay, y por cada una hacer algo tal que asi:
JButton  boton=new JButton("texto sacado de la base de datos por ejemplo");

Ahora, suponiendo que trabajas en un jFrame, deberias hacer algo asi:

"tuJFrame".getContentPane().add(boton);

y todo esto dentro del for para cada iteracion.

Tambie puedes establecer la posicion donde se muestre cada boton y demas, con varias opciones que hay para ello.

boton.setPOsition...
boton.setVerticalAlignement()....

Saludos

klaine

Cuanto es el maximo de botones que tendrías que, en el peor de los casos, poner?

Yo creo que planteandote esto declaras los botones como variables globales, no se si fue porque yo lo hice mal, pero una vez declare botones dentro de un constructor y al agregarlos por mas que agregara el actionlistener nunka me funcionaron, en otro me dijeron que tenían que ser variables declaradas globalmente para poder agregar el listener.

No estoi seguro, pero al parecer un JFrame tiene que ser no visible para poder agregar componentes.

Saludos  ;)


JacobJankowski

Hola, estaba leyendo los post, y me encuentro en la misma situación, no se de cuando sean, pero a mi apenas me encargaron un sistema para un restaurante el cual debe de contener los distintos modulos, como lo es el del cajero, administrador, mesero y en ninguno he tenido problemas, solo con el del mesero en el cual tengo q agregar a un frame botones con el numero de mesa abierta que exista en tiempo real, es decir:

Tengo mesas abiertas:
1-abierta
2-Cerrada
3-Abierta

y que en el frame solo aparezcan la 1 y la 3, y que al ddar clic sobre el boton, este me consulte los detalles de la cuenta de esa mesa...

Yo logre colocar despues de mi consulta en sql los botones ya dentro de un panel que contiene el jframe, pero lo que no logro es que en el evento de los botones al dar clic en cualquiera, me extraiga al menos el valor que contiene el boton como prueba, pues verás, doy clic en el boton de la mesa 1 y no hace absolutamente nada, pero si doy clic en el ultimo boton de la consulta, si me arroja las pruebas que hice de mostrar un mensaje, mira te dejo mi codigo para que ver si alguien me puede ayudar a que con cualquier clic sobre cualquier boton me pueda arrojar las pruebas de qe esta funcional.


Clase mesas

package Mesero;

import conexion.conexion;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
*
* @author Maria
*/
public class mesas extends javax.swing.JFrame implements ActionListener {
String hora, minutos, segundos, ampm;
Thread h1;
private String mesero = "";

    private javax.swing.JButton btnmesas;
    public mesas() {
        initComponents();
        this.setTitle("Panel del mesero");
        consultaEmpresa();
        cargarfecha();
        consultaMesas();
        txtmesero.setText(mesero);
          btnmesas.addActionListener(this);
    }
    public void setmesero(String mesero){
        this.mesero = mesero;
        txtmesero.setText(mesero);
    }
   //METODO DE CONSULTA DE MESAS************************************************
    void consultaMesas()
    {
       
        conexion mysql = new conexion();
        Connection cn = mysql.Conectar();
        String sSQL = "";
     
                JLabel placa = new JLabel ("placas", JLabel.LEFT);
             
            sSQL = "SELECT mesa FROM ventas WHERE estado = 'abierto' ";
            try
        {
           Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(sSQL);
            rs.first();
            int encont = rs.getRow();

if(encont == 1)
{
            cargaMesa();
            }
else {JOptionPane.showMessageDialog(null, "No hay empresa designada");}}
catch ( SQLException ex){JOptionPane.showMessageDialog(null, ex);}}
    //METODO DE CONSULTA DEL NOMBRE DE LA EMPRESA DESIGNADA*********************
void consultaEmpresa()
    {
       
        conexion mysql = new conexion();
        Connection cn = mysql.Conectar();
        String sSQL = "";
                     
               
            sSQL = "SELECT nombre, direccion FROM empresa ";
            try
        {
           Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(sSQL);
            rs.last();
            int encont = rs.getRow();

if(encont == 1)
{
   txtempresa.setText(rs.getString("nombre"));
   txtdireccion.setText(rs.getString("direccion"));
}
else {JOptionPane.showMessageDialog(null, "No hay empresa designada");}}
catch ( SQLException ex){JOptionPane.showMessageDialog(null, ex);}}
//METODO PARA CARGAR LAS MESAS ENCONTRADAS ABIERTAS****************************
void cargaMesa()
{
     conexion mysql = new conexion();
     Connection cn = mysql.Conectar();
     String sSQL = "";
     sSQL = "SELECT mesa FROM ventas WHERE estado = 'abierto'";
     try
     {
         Statement st = cn.createStatement();
         ResultSet rs = st.executeQuery(sSQL);
          while (rs.next()){
              PaneMedio.setLayout(new GridLayout (5,4));
              PaneMedio.setSize(420, 400);
              PaneMedio.add(btnmesas = new JButton( rs.getString("mesa")));
              String path = "/images/mesa.png"; 
              URL url = this.getClass().getResource(path); 
              ImageIcon icon = new ImageIcon(url);
              btnmesas.setIcon(icon);
             
          }
     }catch ( Exception e){
         
     }
}
//METODO PARA CARGAR LA FECHA DEL SISTEMA**************************************
  void cargarfecha() {
        Calendar cal = Calendar.getInstance();
        Calendar c = new GregorianCalendar();
        String dia, mes, annio;
        dia = Integer.toString(c.get(Calendar.DATE));
        mes = Integer.toString(c.get(Calendar.MONTH));
        annio = Integer.toString(c.get(Calendar.YEAR));
        int m = Integer.parseInt(mes);
        int sum = m + 1;
        String mes1 = Integer.toString(sum);
        String fecha = annio + "-" + mes1 + "-" + dia;
        String hora = cal.get(cal.HOUR_OF_DAY) + ":" + cal.get(cal.MINUTE) + ":" + cal.get(cal.SECOND);
        this.txtfecha.setText(fecha);
        this.txthora.setText(hora);
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        txtempresa = new javax.swing.JLabel();
        txtdireccion = new javax.swing.JLabel();
        txtfecha = new javax.swing.JLabel();
        txthora = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        txtmesero = new javax.swing.JLabel();
        txtmesero1 = new javax.swing.JLabel();
        txtmesero2 = new javax.swing.JLabel();
        txtmesero3 = new javax.swing.JLabel();
        txtmesero4 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        txtmesero5 = new javax.swing.JLabel();
        PaneMedio = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(0, 153, 153));
        jPanel1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(0, 0, 0), new java.awt.Color(0, 0, 0), new java.awt.Color(0, 0, 0), new java.awt.Color(0, 0, 0)));

        txtempresa.setFont(new java.awt.Font("Tempus Sans ITC", 1, 24)); // NOI18N

        txtdireccion.setFont(new java.awt.Font("Tempus Sans ITC", 1, 8)); // NOI18N

        txtfecha.setFont(new java.awt.Font("Tempus Sans ITC", 0, 18)); // NOI18N
        txtfecha.setText("jLabel1");

        txthora.setFont(new java.awt.Font("Tempus Sans ITC", 0, 18)); // NOI18N
        txthora.setText("jLabel1");

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/CALENDAR.png"))); // NOI18N

        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/RELOJ.png"))); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(txtempresa, javax.swing.GroupLayout.PREFERRED_SIZE, 411, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(txtdireccion, javax.swing.GroupLayout.PREFERRED_SIZE, 419, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2))
                .addGap(33, 33, 33)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtfecha, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txthora, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(txtempresa, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(txtdireccion, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(txtfecha, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txthora, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel2))
        );

        jPanel2.setBackground(new java.awt.Color(0, 153, 153));
        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Detalle de la Mesa", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tempus Sans ITC", 1, 12), new java.awt.Color(0, 0, 0))); // NOI18N

        txtmesero.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero.setText("jLabel3");

        txtmesero1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero1.setText("Mesa");

        txtmesero2.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero2.setText("Num Venta");

        txtmesero3.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero3.setText("Propina");

        txtmesero4.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero4.setText("Total Venta");

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(jTable1);

        txtmesero5.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txtmesero5.setText("Comanda");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtmesero, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtmesero1, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtmesero2, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtmesero3)
                            .addComponent(txtmesero4)
                            .addComponent(txtmesero5))
                        .addGap(0, 153, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(txtmesero, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtmesero5, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtmesero1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtmesero2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtmesero3, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtmesero4, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        PaneMedio.setBackground(new java.awt.Color(204, 204, 204));
        PaneMedio.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, new java.awt.Color(0, 51, 51), new java.awt.Color(0, 51, 51), new java.awt.Color(0, 51, 51), new java.awt.Color(0, 51, 51)));
        PaneMedio.setPreferredSize(new java.awt.Dimension(461, 5));

        javax.swing.GroupLayout PaneMedioLayout = new javax.swing.GroupLayout(PaneMedio);
        PaneMedio.setLayout(PaneMedioLayout);
        PaneMedioLayout.setHorizontalGroup(
            PaneMedioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 457, Short.MAX_VALUE)
        );
        PaneMedioLayout.setVerticalGroup(
            PaneMedioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );

        jPanel3.setBackground(new java.awt.Color(102, 102, 102));

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 159, Short.MAX_VALUE)
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(PaneMedio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(PaneMedio, javax.swing.GroupLayout.DEFAULT_SIZE, 373, Short.MAX_VALUE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(mesas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(mesas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(mesas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(mesas.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new mesas().setVisible(true);
               
            }
        });
    }

   
    // Variables declaration - do not modify                     
    private javax.swing.JPanel PaneMedio;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JLabel txtdireccion;
    private javax.swing.JLabel txtempresa;
    private javax.swing.JLabel txtfecha;
    private javax.swing.JLabel txthora;
    private javax.swing.JLabel txtmesero;
    private javax.swing.JLabel txtmesero1;
    private javax.swing.JLabel txtmesero2;
    private javax.swing.JLabel txtmesero3;
    private javax.swing.JLabel txtmesero4;
    private javax.swing.JLabel txtmesero5;
    // End of variables declaration                   

    @Override
    public void actionPerformed(ActionEvent ae) {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        if(ae.getSource() == btnmesas){
            JOptionPane.showMessageDialog(null, btnmesas.getText());
        }
    }

   
}

sapito169

#7
Código (java) [Seleccionar]

package javaapplication8;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public final class FormularioMesero extends JFrame {

   ServicioMesa servicioMesa = new ServicioMesa();
   ServicioAutenticacion autenticacion = new ServicioAutenticacion();

   public FormularioMesero() {
       setSize(300, 400);
       setLocationRelativeTo(null);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       agregarMesas();

   }

   private void agregarMesas() {
       List<Mesa> mesasAbiertas = servicioMesa.obtenerMesasAbiertas(autenticacion.getPersonalAutenticado());
       setLayout(new GridLayout(0, 8));

       for (Mesa mesa : mesasAbiertas) {
           final JButton jButton = new JButton(mesa.getNumero() + "");
           jButton.addActionListener(new AccionSelecionoMesa(mesa.getNumero()));
           getContentPane().add(jButton);
       }
   }

   public static void main(String arg[]) {
       new FormularioMesero().setVisible(true);
   }

   private class AccionSelecionoMesa implements ActionListener {

       private int numero;

       public AccionSelecionoMesa(int numero) {
           this.numero = numero;
       }

       @Override
       public void actionPerformed(ActionEvent e) {
           JOptionPane.showMessageDialog(null,"el numero de mesa es "+ numero);
       }
   }
}



Código (java) [Seleccionar]

package javaapplication8;

class Mesa {

   private int numero;

   public Mesa(int numero) {
       this.numero = numero;
   }

   int getNumero() {
       return numero;
   }
}


Código (java) [Seleccionar]


package javaapplication8;


class Personal {
   
}


Código (java) [Seleccionar]

package javaapplication8;


class ServicioAutenticacion {

   Personal getPersonalAutenticado() {
       return null;
   }
   
}


Código (java) [Seleccionar]

package javaapplication8;

import java.util.ArrayList;
import java.util.List;

public class ServicioMesa {

   public List<Mesa> obtenerMesasAbiertas(Personal personal) {
       final ArrayList<Mesa> mesas = new ArrayList<Mesa>();
       mesas.add(new Mesa(1));
       mesas.add(new Mesa(3));
       return mesas;
   }
}



por favor responde aun quesea para insultar

JacobJankowski

Hola que tal

Verás, entiendo el codigo que me has posteado, y noto que me manejas cierto tipo de herencia entre metodos get y set, pero, los botones que estoy agregando contienen solamente el numero de la mesa abierta de una tabla de sql, al realizar la consulta si me obtiene los datos y los pasa a los botones, lo que no realiza en realidad es que al dar clic en cualquier boton, no me muestra un mensaje que pongo como prueba con "JOptionPane.showMessageDialog(null, boton.getText());" para poder saber que numero de mesa estoy clickeando, solamente es funcional en la ultima mesa o el ultimo boton generado.

el método que utilizzo para generar los botones mediante la consulta es el siguiente:

void cargaMesa()
{
     conexion mysql = new conexion();
     Connection cn = mysql.Conectar();
     String sSQL = "";
     sSQL = "SELECT mesa FROM ventas WHERE estado = 'abierto'";
     try
     {
         Statement st = cn.createStatement();
         ResultSet rs = st.executeQuery(sSQL);
          while (rs.next()){
             
              PaneMedio.setLayout(new GridLayout (5,4));
              PaneMedio.setSize(420, 400);
              PaneMedio.add(btnmesas = new JButton( rs.getString("mesa")));
              String path = "/images/mesa.png"; 
              URL url = this.getClass().getResource(path); 
              ImageIcon icon = new ImageIcon(url);
              btnmesas.setIcon(icon);
                     
             
          }
     }catch ( Exception e){
         
     }
}

en donde PaneMedio es un panel que utilizo para poder cargar dentro del mismo los botones

btnmesas, es la variable del boton que agrego cuando se realiza l consulta
al que le agrego de la misma manera una imagen. en el momento de extraer la información de la consulta, manda el numero de la mesa al boton, si por ejemplo son 4 mesas abiertas apareceran 4 botones simultaneos, utilizo un GridLayout para poder acomodar los botones en forma de matriz, pero al dar clic en cualquiera de estos botones, no me muestra nada de mi evento que es el siguiente para los botones que se agregan:

public void actionPerformed(ActionEvent ae) {
             
        if(ae.getSource() == btnmesas){
            JOptionPane.showMessageDialog(null, btnmesas.getText());
        }
    }

Dentro de este evento, indico que si al dar clic en el boton btnmesas, me muestre un mensaje donde aparezca el numero de la mesa, pero solo aparece en el ultimo como mostrare a continuación:

Me aparecera dentro del panel 3 botones de mesas abiertas que tengo en la tabla ventas de sql

Mesa 1
Mesa 2
Mesa 3

si doy clic en mesa 1, no me muestra el mensaje de 1
Igual si doy clic en mesa 2
Pero si doy clic en mesa 3, me muestra un mensaje con el numero 3....

supuse que podría generar un arreglo de botones y un contador de mesas, para indicar a que boton voy a agregar cada numero de mesa y sea mostrado asi al dar clic en cada uno, ya identificaria q botons es, pero dentro del evento, igual tendria que indicar que boton es el que se le dara clic y sale la misma cuestión.. Muchas gracias por responderme,,,, creeme que estoy super desesperado

sapito169

#9
mira si entendiste mi código entonces que te costaba modificar el tullo para que funcione como quiers

ese codigo simplemente no va a funcionar por que esta mal

Código (java) [Seleccionar]


while (rs.next()){
            .....
             PaneMedio.add(btnmesas = new JButton( rs.getString("mesa")));
             ........      
           
         }



mira digamos que si tienes 10 mesas abiertas el while se repetiria 10 veces y por lo tanto el codigo

btnMesa=new JButon(...)

se repetiria 10 veces

eso no tiene sentido por que estas diciendo que la variable btnMesa es igual a un nuevo boton 10 veces es decir por cada repetición estas volviendo a asignar btnMesa a un boton en otras palabras la estas chancando 10 veces


Código (java) [Seleccionar]


while (rs.next()){
            .....
             JButon btnMesa=new JButton( rs.getString("mesa"))
             btnMesa
                  .addActionListener(new AccionEscogioMesa(rs.getString("mesa")));
             PaneMedio.add(btnMesa);
             ........      
           
         }



ese código  quiere decir que en el bucle creas una nuevo botón si hay 10 mesas abiertas crea 10 nuevos botones y a cada uno de ellos le agregas una nueva acción de de tipo "AccionEscogioMesa"


mira si haces esto

JButon btnAceptar;

estas diciendo que estas creando una variable llamada btnAceptar del tipo JButon

y si escribes

btnAceptar =new JButon();

estas diciendo que estas creando un nuevo botón(ese botón ocupa memoria esta en la ran) y que la variable btnAceptar recibe el valor de ese nuevo botón creado


y si pones

JButon btnAceptar=new JButon();

estas haciendo lo mismo solo que en dos lineas

por favor necesito respuesta aun quesea troll