Okey, mira te muestro el código, literalmente tengo la interfaz grafica en una clase, la conexión a la db en otra y el control de botones y eso en otra.
GUI_PRINCIPAL: Aquí tengo instanciado el JTable que quiero que reciba los datos.
Código:
package com.sv.gui;
import com.sv.control.ControlPrincipal;
import com.sv.jdbc.ConnectorJDBC;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
public class guiPrincipal extends JFrame {
//Instanciamos los elementos que queremos
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenuAdd;
private javax.swing.JMenuItem jMenuAddCliente;
private javax.swing.JMenuItem jMenuAddProducto;
private javax.swing.JMenu jMenuAyuda;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenu jMenuList;
private javax.swing.JMenuItem jMenuListCliente;
private javax.swing.JMenuItem jMenuListProducto;
private javax.swing.JMenuItem jMenuPrograma;
private javax.swing.JMenuItem jMenuProgramador;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JButton jbtAgregar;
private javax.swing.JButton jbtCancelar;
private javax.swing.JButton jbtGenerar;
private javax.swing.JLabel jlblFecha;
private javax.swing.JLabel jlblTotal;
private javax.swing.JTextField jtxtTotal;
private javax.swing.JButton jbtQuitar;
private ConnectorJDBC conn;
public guiPrincipal(ConnectorJDBC conn){
//super("Menú de ppciones");
this.conn = conn;
initComponents(); //Iniciamos el método initComponents
setVisible(true);
setLocationRelativeTo(null);
}
public DefaultTableModel getTableModel(){
DefaultTableModel model = new DefaultTableModel();
model.addColumn("ID");
model.addColumn("Producto");
model.addColumn("Precio");
return model;
}
private void initComponents() {
//Objetos del JFrame
jlblFecha = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jtxtTotal = new javax.swing.JTextField();
jlblTotal = new javax.swing.JLabel();
jbtGenerar = new javax.swing.JButton();
jbtCancelar = new javax.swing.JButton();
jbtAgregar = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenuAdd = new javax.swing.JMenu();
jMenuAddCliente = new javax.swing.JMenuItem();
jMenuAddProducto = new javax.swing.JMenuItem();
jMenuList = new javax.swing.JMenu();
jMenuListCliente = new javax.swing.JMenuItem();
jMenuListProducto = new javax.swing.JMenuItem();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuAyuda = new javax.swing.JMenu();
jMenuPrograma = new javax.swing.JMenuItem();
jMenuProgramador = new javax.swing.JMenuItem();
jbtQuitar = new javax.swing.JButton();
//Propiedades del JFrame
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
//Instanciar control de acciones
ControlPrincipal ctrlprin = new ControlPrincipal(this, conn);
//Obtener fecha del sistema
Date date = new Date();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String cadenaFecha = formato.format(date);
jlblFecha.setText(cadenaFecha); //Mostrar Fecha del sistema
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},
{null, null, null},
{null, null, null},
{null, null, null}
},
new String [] {
"ID", "Nombre", "Precio"
}
));
jScrollPane1.setViewportView(jTable1);
//jTextField Total
jtxtTotal.setEditable(false);
jlblTotal.setText("Total:");
//Botones
jbtGenerar.setText("Generar Compra");
jbtCancelar.setText("Cancelar");
jbtAgregar.setText("Agregar");
jbtQuitar.setText("Quitar");
//ActionListenerBotones
jbtAgregar.addActionListener(ctrlprin);
//Menús
jMenuAdd.setText("Agregar");
jMenuAddCliente.setText("Agregar Cliente");
jMenuAddCliente.addActionListener(ctrlprin);
jMenuAdd.add(jMenuAddCliente);
jMenuAddProducto.setText("Agregar Producto");
jMenuAddProducto.addActionListener(ctrlprin);
jMenuAdd.add(jMenuAddProducto);
jMenuBar1.add(jMenuAdd);
jMenuList.setText("Listar");
jMenuListCliente.setText("Listar Cliente");
jMenuListCliente.addActionListener(ctrlprin);
jMenuList.add(jMenuListCliente);
jMenuListProducto.setText("Listar Producto");
jMenuListProducto.addActionListener(ctrlprin);
jMenuList.add(jMenuListProducto);
jMenuBar1.add(jMenuList);
jMenu1.setText("Eliminar");
jMenuItem1.setText("Eliminar Cliente");
jMenuItem1.addActionListener(ctrlprin);
jMenu1.add(jMenuItem1);
jMenuItem2.setText("Eliminar Producto");
jMenuItem2.addActionListener(ctrlprin);
jMenu1.add(jMenuItem2);
jMenuBar1.add(jMenu1);
jMenuAyuda.setText("Ayuda");
jMenuPrograma.setText("Sobre el programa");
jMenuPrograma.addActionListener(ctrlprin);
jMenuAyuda.add(jMenuPrograma);
jMenuProgramador.setText("Sobre el programador");
jMenuProgramador.addActionListener(ctrlprin);
jMenuAyuda.add(jMenuProgramador);
jMenuBar1.add(jMenuAyuda);
setJMenuBar(jMenuBar1);
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(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 562, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jbtCancelar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jbtAgregar, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
.addGap(18, 18, 18)
.addComponent(jbtQuitar, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 112, Short.MAX_VALUE)
.addComponent(jlblTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jbtGenerar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jtxtTotal, javax.swing.GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)))
.addComponent(jlblFecha, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jlblFecha)
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 202, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jtxtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jlblTotal))
.addGap(18, 18, 18)
.addComponent(jbtGenerar))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jbtAgregar)
.addComponent(jbtQuitar))
.addGap(18, 18, 18)
.addComponent(jbtCancelar)))
.addContainerGap(14, Short.MAX_VALUE))
);
pack();
}
} CONTROLPRINCIPAL: Es el control de la clase anterior
Código:
package com.sv.control;
import com.sv.gui.guiAddCli;
import com.sv.gui.guiAddProd;
import com.sv.gui.guiDelCli;
import com.sv.gui.guiDelProd;
import com.sv.gui.guiListCli;
import com.sv.gui.guiListProd;
import com.sv.gui.guiPrincipal;
import com.sv.gui.guiVenta;
import com.sv.jdbc.ConnectorJDBC;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class ControlPrincipal implements ActionListener{
private guiPrincipal guiprincipal;
private ConnectorJDBC conn;
public ControlPrincipal(guiPrincipal guiprincipal, ConnectorJDBC conn){
this.guiprincipal = guiprincipal;
this.conn = conn;
}
@Override
public void actionPerformed(ActionEvent e) {
String boton = e.getActionCommand();
if(boton.equalsIgnoreCase("Agregar")){
guiVenta guiventa = new guiVenta(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Agregar Producto")){
guiAddProd guiaddprod = new guiAddProd(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Agregar Cliente")){
guiAddCli guiaddcli = new guiAddCli(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Listar Producto")){
guiListProd guilistprod = new guiListProd(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Listar Cliente")){
guiListCli guilistcli = new guiListCli(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Eliminar Producto")){
guiDelProd guidelprod = new guiDelProd(guiprincipal, conn);
}
else if(boton.equalsIgnoreCase("Eliminar Cliente")){
guiDelCli guidelcli = new guiDelCli(guiprincipal, conn);
}
}
} GUIVENTA: Aqui es donde me lista en un JTable los productos de la base de datos.
Código:
package com.sv.gui;
import com.sv.control.ControlListProd;
import com.sv.jdbc.ConnectorJDBC;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JDialog;
import javax.swing.table.DefaultTableModel;
public final class guiVenta extends JDialog{
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JButton jbtAgregar;
private javax.swing.JButton jbtBuscar;
private javax.swing.JTextField jtxtBuscar;
private ConnectorJDBC conn;
public guiVenta(guiPrincipal guiPrincipal, ConnectorJDBC conn) {
this.conn = conn;
initComponents();
setVisible(true);
setResizable(false);
}
public DefaultTableModel getTableModel(){
DefaultTableModel model = new DefaultTableModel(); //Instanciación DefaultTableModel
//Nombre de las columnas del JTable
model.addColumn("ID");
model.addColumn("Nombre");
model.addColumn("Precio");
ArrayList arrFilasProd = ControlListProd.getProducto(conn);
Iterator it = arrFilasProd.iterator();
while (it.hasNext()) {
Object object = it.next();
Object[] datos = (Object[])object;
model.addRow(datos);
}
return model;
}
private void initComponents() {
jtxtBuscar = new javax.swing.JTextField();
jbtBuscar = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jbtAgregar = new javax.swing.JButton();
//Atributos del JDialog
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Sistema de venta");
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
setMinimumSize(new java.awt.Dimension(515, 4));
setResizable(false);
//Instanciación ActionListener
ControlListProd control = new ControlListProd(jTable1, conn);
jTable1.getModel().addTableModelListener(control);
//Botones
jbtBuscar.setText("Buscar");
jbtAgregar.setText("Agregar");
jTable1.setModel(getTableModel());
jScrollPane1.setViewportView(jTable1);
//Ubicación de elementos en la interfaz.
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(jtxtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 364, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(32, 32, 32)
.addComponent(jbtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(jbtAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(13, 13, 13)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(1, 1, 1)
.addComponent(jtxtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jbtBuscar))
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jbtAgregar))
);
pack();
}
} CONTROLVENTA: Es el control de los elementos de la clase anterior. Cabe destacar que la uso tanto para listar, como para "hacer click en una fila, luego click en boton eliminar y eliminar un producto" no tengo implementado la opción de traspasar a la otra tabla o de insertar.
Código:
package com.sv.control;
import com.sv.clases.Producto;
import com.sv.jdbc.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class ControlListProd implements ActionListener,TableModelListener{
private JTable tabla;
private ConnectorJDBC conn;
public ControlListProd(JTable tabla, ConnectorJDBC conn) {
this.tabla = tabla;
this.conn = conn;
}
public static ArrayList getProducto(ConnectorJDBC conn){
return EntityProducto.getProductos(conn);
}
public void actionPerformed(ActionEvent e) {
String boton = e.getActionCommand();
DefaultTableModel model = (DefaultTableModel)tabla.getModel();
if(boton.equalsIgnoreCase("Eliminar")){
int indexFila = tabla.getSelectedRow();
Object obj = tabla.getModel().getValueAt(indexFila, 0).toString();
Producto prod = new Producto();
prod.setID(obj.toString());
boolean resp = EntityProducto.deleteProducto(prod, conn);
model.removeRow(indexFila);
if(resp == true){
JOptionPane.showMessageDialog(null, "Registro eliminado con exito",
"Eliminación de datos", JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null, "Error" +" "+ e +" "+ "Al eliminar producto",
"Eliminación de datos", JOptionPane.ERROR_MESSAGE);
}
}
}
public void tableChanged(TableModelEvent e) {
int tipo = e.getType();
if(tipo == TableModelEvent.UPDATE){
int indiceFila = tabla.getSelectedRow();
Object objActual = tabla.getModel().getValueAt(indiceFila, 0);
if(objActual instanceof Producto){
Producto prod = (Producto)objActual;
prod.setNombre((String)tabla.getModel().getValueAt(indiceFila, 1));
prod.setPrecio((String)tabla.getModel().getValueAt(indiceFila, 2));
boolean resp = EntityProducto.updateProducto(prod, conn);
if(resp == true){
System.out.println("REGISTRO ACTUALIZADO CON EXITO");
}else{
System.out.println("ERROR EL ACTUALIZAR REGISTRO");
}
}else{
System.out.println("NO SE PERMITE CAMBIA EL ID DE PRODUCTO!");
}
}
}
}