Codigo de Ejemplos Java Eclipse
Codigo de Ejemplos Java Eclipse
Ejemplos Java
Autor: Fernando Rafael Filipuzzi E-mail: [email protected]
Temas: Introduccin Interfaces con Swing Ejemplo1: Hola mundo Ejemplo2: Hola mundo Ejemplo3: ABM Ejemplo4: ABM Ejemplo5: Eventos DAO y Paginado JDBC Hibernate JPA Enlaces
1. Introduccin
Aqu voy a ir agregando ejemplos java. Luego har una descripcin de cada uno.
App.java
package ar.com.hdcm.ejemploswing1.gui.app; /* * autor: * fernando rafael filipuzzi * * e-mail: * [email protected] * * sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import import import import import import javax.swing.JButton; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.JTextField; javax.swing.SwingConstants;
public class App extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L;
private JTextField jtfInput = new JTextField(15); private JLabel jlOutput = new JLabel(); private JButton jbMostrar = new JButton("Mostrar"); private JButton jbCerrar = new JButton("Cerrar"); public App(){ this.getContentPane().setLayout(new BorderLayout()); this.setTitle("Ejemplo Swing 1"); /*formulario*/ JPanel jpFormulario = new JPanel(); this.add(jpFormulario,BorderLayout.CENTER); jpFormulario.setLayout(new GridBagLayout()); jpFormulario.add(new JLabel("Valor: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfInput,new GridBagConstraints(1,0,1,1,100.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(jlOutput,new GridBagConstraints(0,1,2,1,100.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); /*barra de botones*/ JPanel jpBarraBotones = new JPanel(); this.add(jpBarraBotones,BorderLayout.SOUTH); jpBarraBotones.setLayout(new FlowLayout()); jpBarraBotones.add(jbMostrar); jbMostrar.addActionListener(this); jpBarraBotones.add(jbCerrar); jbCerrar.addActionListener(this); this.pack(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && jbCerrar.equals(e.getSource())){ System.exit(0); }else if(e!=null && jbMostrar.equals(e.getSource())){ jlOutput.setText(jtfInput.getText()); } } public static void main(String [] args){ App app=new App(); app.setVisible(true); } }
App.java
public class App extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private JTextField jtfInput = new JTextField(15); private JLabel jlOutput = new JLabel(" "); private JButton jbMostrar = new JButton("Mostrar"); private JButton jbCerrar = new JButton("Cerrar"); public App(){
this.getContentPane().setLayout(new BorderLayout()); this.setTitle("Ejemplo Swing 2"); /*formulario*/ JPanel jpFormulario = new JPanel(); this.add(jpFormulario,BorderLayout.CENTER); jpFormulario.setLayout(new GridBagLayout()); jpFormulario.add(new JLabel("Valor: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfInput,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); JPanel jpResultado = new JPanel(); jpResultado.setLayout(new BorderLayout()); jpResultado.add(jlOutput, BorderLayout.CENTER); jpFormulario.add(new JScrollPane(jpResultado,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORI ZONTAL_SCROLLBAR_ALWAYS),new GridBagConstraints(0,1,2,2,100.0,100.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); //http://download.oracle.com/javase/1.4.2/docs/api/java/awt/GridBagCo nstraints.html#anchor //http://download.oracle.com/javase/1.4.2/docs/api/java/awt/GridBagCo nstraints.html /*barra de botones*/ JPanel jpBarraBotones = new JPanel(); this.add(jpBarraBotones,BorderLayout.SOUTH); jpBarraBotones.setLayout(new FlowLayout()); jpBarraBotones.add(jbMostrar); jbMostrar.addActionListener(this); jpBarraBotones.add(jbCerrar); jbCerrar.addActionListener(this); this.pack(); this.setResizable(false); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && jbCerrar.equals(e.getSource())){ System.exit(0); }else if(e!=null && jbMostrar.equals(e.getSource())){ jlOutput.setText(jtfInput.getText()); } } public static void main(String [] args){ App app1=new App(); app1.setVisible(true);
} }
*****************************************************************************
package ar.com.hdcm.producto.gui.app; /* * autor: * fernando rafael filipuzzi * * e-mail: * [email protected] * * sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ import java.awt.BorderLayout; import java.awt.Dimension;
import import import import import import import import import import import import import import import import import import import import
java.awt.FlowLayout; java.awt.GridBagConstraints; java.awt.GridBagLayout; java.awt.Insets; java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.BorderFactory; javax.swing.JButton; javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.JScrollPane; javax.swing.JTable; javax.swing.JTextField; javax.swing.SwingConstants; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionListener; javax.swing.event.TableModelEvent; javax.swing.event.TableModelListener;
import ar.com.hdcm.producto.gui.tablemodel.ProductosTableModel; import ar.com.hdcm.producto.modelo.Producto; public class App extends JFrame implements ActionListener, ListSelectionListener, TableModelListener{ private static final long serialVersionUID = 1L; private JTextField jtfProductoCodigo = new JTextField(15); private JTextField jtfProductoNombre= new JTextField(15); private JCheckBox jcbProductoDisponible = new JCheckBox("Disponible"); private private private private JButton JButton JButton JButton jbNuevo = new JButton("Nuevo"); jbAgregar = new JButton("Agregar"); jbModificar = new JButton("Modificar"); jbEliminar = new JButton("Eliminar");
private JScrollPane jspTabla = new JScrollPane(); private JTable jtTabla=new JTable(); private Producto producto=new Producto(); private ProductosTableModel tmProductos=new ProductosTableModel(); private JButton jbCerrar = new JButton("Cerrar"); public App(){ this.getContentPane().setLayout(new BorderLayout()); this.setTitle("Ejemplo 3: ABM"); /* ----| | |
| | |(GridBa
| (JPanel) | (posicion0,0) |------------------------------------------------------| Adm |(GridBagLayout) | borderLayout | (center) | (jPanel) | | | |(posicion0,1) | jspScrollPane | jtTabla | | | | | jpPanel |----------------------------------------------------------------------| (FlowLayout) | | (sur) | [Cerrar] |-------------------|--------------------- ------------------------------------------------**/ /*adm*/ JPanel jpAdm=new JPanel(); jpAdm.setLayout(new GridBagLayout()); this.add(jpAdm,BorderLayout.CENTER); /*formulario*/ JPanel jpAdmFormulario = new JPanel(); jpAdmFormulario.setBorder(BorderFactory.createTitledBorder("Datos de Producto")); jpAdmFormulario.setLayout(new GridBagLayout()); jpAdm.add(jpAdmFormulario,new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(new JLabel("Cdigo: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jtfProductoCodigo,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jcbProductoDisponible,new GridBagConstraints(2,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(new JLabel("Nombre: ",SwingConstants.RIGHT),new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jtfProductoNombre,new GridBagConstraints(1,1,2,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); /*detalle*/ JPanel jpAdmDetalle=new JPanel(); | | | | | | |
jpAdmDetalle.setLayout(new BorderLayout()); jpAdm.add(jpAdmDetalle,new GridBagConstraints(0,1,1,2,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); /*detalle/barrabotones*/ JPanel jpAdmDetalleBarraBotones = new JPanel(); jpAdmDetalleBarraBotones.setLayout(new FlowLayout()); jpAdmDetalle.add(jpAdmDetalleBarraBotones,BorderLayout.NORTH); jpAdmDetalleBarraBotones.add(jbNuevo); jbNuevo.addActionListener(this); jpAdmDetalleBarraBotones.add(jbAgregar); jbAgregar.addActionListener(this); jpAdmDetalleBarraBotones.add(jbModificar); jbModificar.addActionListener(this); jpAdmDetalleBarraBotones.add(jbEliminar); jbEliminar.addActionListener(this); /*detalle/tabla*/ jpAdmDetalle.add(jspTabla); jtTabla.setModel(tmProductos); jtTabla.setPreferredScrollableViewportSize(new Dimension(500, 85)); jtTabla.setFillsViewportHeight(true); jtTabla.setAutoCreateRowSorter(true); //Sorting and Filtering /*alternativa TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()); table.setRowSorter(sorter); redefinir Comparator<String> comparator = new Comparator<String>() { public int compare(String s1, String s2) { String[] strings1 = s1.split("\\s"); String[] strings2 = s2.split("\\s"); return strings1[strings1.length 1].compareTo(strings2[strings2.length - 1]); } }; */ jtTabla.getSelectionModel().addListSelectionListener(this); jspTabla.setViewportView(jtTabla); /*barra de botones*/ JPanel jpBarraBotones = new JPanel(); this.add(jpBarraBotones,BorderLayout.SOUTH); jpBarraBotones.setLayout(new FlowLayout()); jpBarraBotones.add(jbCerrar); jbCerrar.addActionListener(this);
nuevoProducto(); this.pack(); } public static void main(String [] args){ App app=new App(); app.setVisible(true); } public void seleccionarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); if(producto!=null){ jtfProductoCodigo.setText(producto.getCodigo().toString()); jtfProductoNombre.setText(producto.getNombre()); } if(this.producto!=null){ this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(false); this.jbModificar.setEnabled(true); this.jbEliminar.setEnabled(true); }else{ nuevoProducto(); } } public void nuevoProducto(){ this.producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(true); this.jbModificar.setEnabled(false); this.jbEliminar.setEnabled(false); } public void addProducto(){ this.jspTabla.remove(jtTabla); producto = new Producto(); Integer codigo=null; if(jtfProductoCodigo.getText()!=null && !jtfProductoCodigo.getText().equals("") && !jtfProductoCodigo.getText().contains(" ")){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); if(producto.getCodigo()!=null){ tmProductos.productos.add(producto); } producto.setDisponible(jcbProductoDisponible.isSelected());
this.jspTabla.setViewportView(jtTabla); /*limpia el formulario*/ this.producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(true); this.jbModificar.setEnabled(false); this.jbEliminar.setEnabled(false); } public void modificarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); if(this.producto!=null){ Integer codigo=null; if(jtfProductoCodigo.getText()!=null){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jcbProductoDisponible.isSelected()); } this.jtTabla.repaint(); } public void eliminarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); tmProductos.productos.remove(producto); this.jtTabla.repaint(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && jbCerrar.equals(e.getSource())){ System.exit(0); }else if(e!=null && jbNuevo.equals(e.getSource())){ nuevoProducto(); }else if(e!=null && jbAgregar.equals(e.getSource())){ addProducto(); nuevoProducto(); }else if(e!=null && jbModificar.equals(e.getSource())){ modificarProducto(); }else if(e!=null && jbEliminar.equals(e.getSource())){ eliminarProducto(); nuevoProducto(); } }
@Override public void valueChanged(ListSelectionEvent e) { int viewRow = jtTabla.getSelectedRow(); if (viewRow < 0) { System.out.println(""); } else { int modelRow = jtTabla.convertRowIndexToModel(viewRow); System.out.println(String.format("Selected Row in view: %d. " +"Selected Row in model: %d.",viewRow, modelRow)); seleccionarProducto(); } } @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); ProductosTableModel model = (ProductosTableModel) e.getSource(); String columnName = model.getColumnName(column); Producto data = (Producto)model.getValueAt(row, column); System.out.println(data.getId()+"-"+data.getCodigo()+""+data.getNombre() + " - "+ columnName); } }
**********************************************************************
package ar.com.hdcm.producto.modelo; /* * autor: * fernando rafael filipuzzi * * e-mail: * [email protected] * * sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ public class Producto { private Integer id; private Integer codigo; private String nombre; private Boolean disponible=false; public Producto(){ } public Integer getId() { return id;
} public void setId(Integer id) { this.id = id; } public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public Boolean getDisponible() { return disponible; } public void setDisponible(Boolean disponible) { this.disponible = disponible; } }
****************************************************************
package ar.com.hdcm.producto.gui.tablemodel; /* * autor: * fernando rafael filipuzzi * * e-mail: * [email protected] * * sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ import java.util.ArrayList; import java.util.List; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import ar.com.hdcm.producto.modelo.Producto; public class ProductosTableModel implements TableModel{ public List<Producto> productos = new ArrayList<Producto>(); public List<String> nombreColumnas = new ArrayList<String>(); public List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>();
public ProductosTableModel(){ nombreColumnas.add("Cdigo"); nombreColumnas.add("Nombre"); nombreColumnas.add("Disponible"); } @Override public Class<?> getColumnClass(int arg0) { return getValueAt(0, arg0).getClass(); } @Override public int getColumnCount() { if(nombreColumnas!=null){ return nombreColumnas.size(); } return 0; } @Override public String getColumnName(int arg0) { if(nombreColumnas!=null && arg0>=0 && nombreColumnas.size()>arg0){ return nombreColumnas.get(arg0); } return null; } @Override public int getRowCount() { if(productos!=null){ return productos.size(); } return 0; } @Override public Object getValueAt(int arg0, int arg1) { if(productos!=null && arg0>=0 && arg1>=0 && productos.size()>arg0){ Producto producto=productos.get(arg0); switch(arg1){ case 0: return producto.getCodigo(); case 1: return producto.getNombre(); case 2: return producto.getDisponible(); } } return null; } @Override public void setValueAt(Object arg0, int arg1, int arg2) { if(productos!=null && arg1>=0 && arg2>=0 && productos.size()>arg1){ Producto producto=productos.get(arg1); switch(arg2){ case 0: Integer codigoNuevo=null;
if(arg0!=null){ codigoNuevo=(Integer)arg0; } producto.setCodigo(codigoNuevo); break; case 1: String nombreNuevo=null; if(arg0!=null){ nombreNuevo=(String)arg0; } producto.setNombre(nombreNuevo); break; case 2: Boolean disponible=false; if(arg0!=null){ disponible=(Boolean)arg0; } producto.setDisponible(disponible); break; } } } @Override public boolean isCellEditable(int arg0, int arg1) { return false; } @Override public void removeTableModelListener(TableModelListener arg0) { tableModelListeners.add(arg0); } @Override public void addTableModelListener(TableModelListener arg0) { tableModelListeners.remove(arg0); } }
********************************************************************************
1. Ejemplo 4: ABM
ProductosTableModel.java
package ar.com.hdcm.producto.app.gui.app; /* * @autor: * fernando rafael filipuzzi * * @e-mail: * [email protected] * * @sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import import import import import javax.swing.BorderFactory; javax.swing.JButton; javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel;
import ar.com.hdcm.producto.app.gui.listener.BarraBotonesActionListener; import ar.com.hdcm.producto.app.gui.tablemodel.ProductosTableModel; import ar.com.hdcm.producto.app.modelo.Producto; public class App extends JFrame implements ActionListener, ListSelectionListener, TableModelListener{ private static final long serialVersionUID = 1L; private JTextField jtfProductoCodigo = new JTextField(15); private JTextField jtfProductoNombre= new JTextField(15); private JCheckBox jcbProductoDisponible = new JCheckBox("Disponible"); private private private private JButton JButton JButton JButton jbNuevo = new JButton("Nuevo"); jbAgregar = new JButton("Agregar"); jbModificar = new JButton("Modificar"); jbEliminar = new JButton("Eliminar");
private JScrollPane jspTabla = new JScrollPane(); private JTable jtTabla=new JTable(); private Producto producto=new Producto(); private ProductosTableModel tmProductos=new ProductosTableModel(); private JButton jbCerrar = new JButton("Cerrar"); public App(){ this.getContentPane().setLayout(new BorderLayout()); this.setTitle("Ejemplo 4 - ABM"); /* ----| | | | (JPanel) | (posicion0,0) |------------------------------------------------------borderLayout | | |(GridBagLayout) (center) | | | | | jtTabla | | Adm | (jPanel) | | | | |
| | |(GridBa
|(posicion0,1) |
jspScrollPane
| | | jpPanel |----------------------------------------------------------------------| (FlowLayout) | | (sur) | [Cerrar] |-------------------|--------------------- ------------------------------------------------**/ /*adm*/ JPanel jpAdm=new JPanel(); jpAdm.setLayout(new GridBagLayout()); this.add(jpAdm,BorderLayout.CENTER); /*formulario*/ JPanel jpAdmFormulario = new JPanel(); jpAdmFormulario.setBorder(BorderFactory.createTitledBorder("Datos de Producto")); jpAdmFormulario.setLayout(new GridBagLayout()); jpAdm.add(jpAdmFormulario,new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(new JLabel("Cdigo: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jtfProductoCodigo,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jcbProductoDisponible,new GridBagConstraints(2,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(new JLabel("Nombre: ",SwingConstants.RIGHT),new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpAdmFormulario.add(jtfProductoNombre,new GridBagConstraints(1,1,2,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); /*detalle*/ JPanel jpAdmDetalle=new JPanel(); jpAdmDetalle.setLayout(new BorderLayout()); jpAdm.add(jpAdmDetalle,new GridBagConstraints(0,1,1,2,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); /*detalle/barrabotones*/ JPanel jpAdmDetalleBarraBotones = new JPanel(); jpAdmDetalleBarraBotones.setLayout(new FlowLayout()); jpAdmDetalle.add(jpAdmDetalleBarraBotones,BorderLayout.NORTH); jpAdmDetalleBarraBotones.add(jbNuevo);
| |
jbNuevo.addActionListener(this); jpAdmDetalleBarraBotones.add(jbAgregar); jbAgregar.addActionListener(this); jpAdmDetalleBarraBotones.add(jbModificar); jbModificar.addActionListener(this); jpAdmDetalleBarraBotones.add(jbEliminar); jbEliminar.addActionListener(this); /*detalle/tabla*/ jpAdmDetalle.add(jspTabla); jtTabla.setModel(tmProductos); jtTabla.setAutoCreateRowSorter(true); //Sorting and Filtering /*alternativa al "sorting and filtering" TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel()); table.setRowSorter(sorter); redefinir Comparator<String> comparator = new Comparator<String>() { public int compare(String s1, String s2) { String[] strings1 = s1.split("\\s"); String[] strings2 = s2.split("\\s"); return strings1[strings1.length 1].compareTo(strings2[strings2.length - 1]); } }; */ jtTabla.getSelectionModel().addListSelectionListener(this); jspTabla.setViewportView(jtTabla); jtTabla.setPreferredScrollableViewportSize(new Dimension(500, 85)); jtTabla.setFillsViewportHeight(true); /*barra de botones*/ JPanel jpBarraBotones = new JPanel(); this.add(jpBarraBotones,BorderLayout.SOUTH); jpBarraBotones.setLayout(new FlowLayout()); jpBarraBotones.add(jbCerrar); jbCerrar.setActionCommand("CERRAR"); jbCerrar.addActionListener(new BarraBotonesActionListener()); nuevoProducto(); this.pack(); } public static void main(String [] args){ App app=new App(); app.setVisible(true); }
public void seleccionarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); if(producto!=null){ jtfProductoCodigo.setText(producto.getCodigo().toString()); jtfProductoNombre.setText(producto.getNombre()); } if(this.producto!=null){ this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(false); this.jbModificar.setEnabled(true); this.jbEliminar.setEnabled(true); }else{ nuevoProducto(); } } public void nuevoProducto(){ this.producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(true); this.jbModificar.setEnabled(false); this.jbEliminar.setEnabled(false); } public void addProducto(){ this.jspTabla.remove(jtTabla); producto = new Producto(); Integer codigo=null; if(jtfProductoCodigo.getText()!=null && !jtfProductoCodigo.getText().equals("") && !jtfProductoCodigo.getText().contains(" ")){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); if(producto.getCodigo()!=null){ tmProductos.productos.add(producto); } producto.setDisponible(jcbProductoDisponible.isSelected()); this.jspTabla.setViewportView(jtTabla); /*limpia el formulario*/ this.producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); this.jbNuevo.setEnabled(true); this.jbAgregar.setEnabled(true); this.jbModificar.setEnabled(false); this.jbEliminar.setEnabled(false);
} public void modificarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); if(this.producto!=null){ Integer codigo=null; if(jtfProductoCodigo.getText()!=null){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jcbProductoDisponible.isSelected()); } this.jtTabla.repaint(); } public void eliminarProducto(){ this.producto=tmProductos.productos.get(jtTabla.getSelectedRow()); tmProductos.productos.remove(producto); this.jtTabla.repaint(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && jbNuevo.equals(e.getSource())){ nuevoProducto(); }else if(e!=null && jbAgregar.equals(e.getSource())){ addProducto(); nuevoProducto(); }else if(e!=null && jbModificar.equals(e.getSource())){ modificarProducto(); }else if(e!=null && jbEliminar.equals(e.getSource())){ eliminarProducto(); nuevoProducto(); } } @Override public void valueChanged(ListSelectionEvent e) { int viewRow = jtTabla.getSelectedRow(); if (viewRow < 0) { System.out.println(""); } else { int modelRow = jtTabla.convertRowIndexToModel(viewRow); System.out.println(String.format("Selected Row in view: %d. " +"Selected Row in model: %d.",viewRow, modelRow)); seleccionarProducto(); }
//http://download.oracle.com/javase/tutorial/uiswing/components/table .html#editor //http://inforux.wordpress.com/category/jcheckbox/ //http://download.oracle.com/javase/tutorial/uiswing/components/border.html //http://inforux.wordpress.com/2008/07/21/aprediendo-con-jcheckbox-yjradiobutton/#more-309 } @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); ProductosTableModel model = (ProductosTableModel) e.getSource(); String columnName = model.getColumnName(column); Producto data = (Producto)model.getValueAt(row, column); System.out.println(data.getId()+"-"+data.getCodigo()+""+data.getNombre()+"-"+columnName); //http://download.oracle.com/javase/tutorial/uiswing/layout/visual.ht ml } }
******************************************************************
package ar.com.hdcm.producto.app.gui.listener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class BarraBotonesActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if(e!=null && e.getActionCommand()!=null && e.getActionCommand().equals("CERRAR")){ System.exit(0); } } }
**************************************************
package ar.com.hdcm.producto.app.modelo; /* * @autor: * fernando rafael filipuzzi * * @e-mail:
* [email protected] * * @sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ public class Producto { private Integer id; private Integer codigo; private String nombre; private Boolean disponible=false; public Producto(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public Boolean getDisponible() { return disponible; } public void setDisponible(Boolean disponible) { this.disponible = disponible; } }
*******************************************
package ar.com.hdcm.producto.app.gui.tablemodel; /* * @autor: * fernando rafael filipuzzi * * @e-mail: * [email protected] *
* @sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ import java.util.ArrayList; import java.util.List; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import ar.com.hdcm.producto.app.modelo.Producto; public class ProductosTableModel implements TableModel{ public List<Producto> productos = new ArrayList<Producto>(); public List<String> nombreColumnas = new ArrayList<String>(); public List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>(); public ProductosTableModel(){ nombreColumnas.add("Cdigo"); nombreColumnas.add("Nombre"); nombreColumnas.add("Disponible"); } @Override public Class<?> getColumnClass(int arg0) { return getValueAt(0, arg0).getClass(); } @Override public int getColumnCount() { if(nombreColumnas!=null){ return nombreColumnas.size(); } return 0; } @Override public String getColumnName(int arg0) { if(nombreColumnas!=null && arg0>=0 && nombreColumnas.size()>arg0){ return nombreColumnas.get(arg0); } return null; } @Override public int getRowCount() { if(productos!=null){ return productos.size(); } return 0; }
@Override public Object getValueAt(int arg0, int arg1) { if(productos!=null && arg0>=0 && arg1>=0 && productos.size()>arg0){ Producto producto=productos.get(arg0); switch(arg1){ case 0: return producto.getCodigo(); case 1: return producto.getNombre(); case 2: return producto.getDisponible(); } } return null; } @Override public void setValueAt(Object arg0, int arg1, int arg2) { if(productos!=null && arg1>=0 && arg2>=0 && productos.size()>arg1){ Producto producto=productos.get(arg1); switch(arg2){ case 0: Integer codigoNuevo=null; if(arg0!=null){ codigoNuevo=(Integer)arg0; } producto.setCodigo(codigoNuevo); break; case 1: String nombreNuevo=null; if(arg0!=null){ nombreNuevo=(String)arg0; } producto.setNombre(nombreNuevo); break; case 2: Boolean disponible=false; if(arg0!=null){ disponible=(Boolean)arg0; } producto.setDisponible(disponible); break; } } } @Override public boolean isCellEditable(int arg0, int arg1) { return false; } @Override public void removeTableModelListener(TableModelListener arg0) { tableModelListeners.add(arg0); } @Override public void addTableModelListener(TableModelListener arg0) { tableModelListeners.remove(arg0);
} }
**********************************************************************
1. 1. Ejemplo 5: Eventos Ficheros fuentes: App.java CustomEvent.java CustomEventListener.java CustomPanel.java 2. Tarballs del proyecto en Eclipse: EjemploSwing5.tar.gz App.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.ejemploswing5.gui.app; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import ar.com.hdcm.swing.CustomPanel; import ar.com.hdcm.swing.event.CustomEvent; import ar.com.hdcm.swing.listener.CustomEventListener; public class App extends JFrame implements CustomEventListener{ private static final long serialVersionUID = 1L; private CustomPanel cp = new CustomPanel(); private JLabel jl = new JLabel(" ");
public App(){ super("Ejemplo 5 - Custom Event"); this.getContentPane().setLayout(new BorderLayout()); this.add(cp,BorderLayout.CENTER); cp.addCustomEventListener(this); this.add(jl,BorderLayout.SOUTH); pack(); } public static void main(String [] args){ App app= new App(); app.setVisible(true); } @Override public void customEventOcurrido(CustomEvent customEvent) { jl.setText("Hola Mundo"); } }
CustomEvent.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing.event; import java.util.EventObject; public class CustomEvent extends EventObject { private static final long serialVersionUID = 1L; public CustomEvent(Object source) { super(source); } }
CustomEventListener.java
/* * * * * * * * * * *
@autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing.listener; import java.util.EventListener; import ar.com.hdcm.swing.event.CustomEvent; public interface CustomEventListener extends EventListener { public void customEventOcurrido(CustomEvent customEvent); }
CustomPanel.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; import ar.com.hdcm.swing.event.CustomEvent; import ar.com.hdcm.swing.listener.CustomEventListener; public class CustomPanel extends JPanel { private static final long serialVersionUID = 1L; // Create the listener list
protected javax.swing.event.EventListenerList listenerList =new javax.swing.event.EventListenerList(); public CustomPanel(){ this.setLayout(new FlowLayout()); JButton jbAceptar = new JButton("Aceptar"); jbAceptar.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { CustomEvent customEvent= new CustomEvent(CustomPanel.this); CustomPanel.this.fireCustomEvent(customEvent); } }); this.add(jbAceptar); } // This methods allows classes to register for MyEvents public void addCustomEventListener(CustomEventListener listener) { listenerList.add(CustomEventListener.class, listener); } // This methods allows classes to unregister for MyEvents public void removeCustomEventListener(CustomEventListener listener) { listenerList.remove(CustomEventListener.class, listener); } // This private class is used to fire MyEvents void fireCustomEvent(CustomEvent customEvent) { Object[] listeners = listenerList.getListenerList(); // Each listener occupies two elements - the first is the listener class // and the second is the listener instance for (int i=0; i<listeners.length; i+=2) { if (listeners[i]==CustomEventListener.class) { ((CustomEventListener)listeners[i+1]).customEventOcurrido(customEvent); } } } }
2. DAO y Paginado
1. Ejemplo 1 - JDBC: En este ejemplo incluye una tabla paginada, tambin se implementa en forma simplificada la persistencia utilizando el patrn DAO usando como base de datos
a Postgresql. Al importar el proyecto se requiere el driver a esta base, est incluido el jar utilizado en los tarballs de este ejemplo.
La interfaz grfica: App.java ProductosTableModel.java Las clases relacionadas con el paginado: Paginador.java Paginable.java AbstractPaginable.java PaginadorEventListener.java PaginadorEvent.java Las clases relacionadas con el modelo y la persistencia: Producto.java DAOFactory.java PgdbProductoDAO.java PgdbProductoDAOException.java ProductoDAO.java DAOException.java
Tarballs del proyecto en Eclipse: EjemploJdbc.tar.gz Otros: he creado un jar del componente Paginador para incluirlo luego en otros proyectos: ar.com.hdcm.swing.jar La interfaz grfica: App.java
/* * * * * * * * * * *
@autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.gui.app;
import import import import import import import import import import import import import import import import import import import import import import import
java.awt.BorderLayout; java.awt.Dimension; java.awt.FlowLayout; java.awt.GridBagConstraints; java.awt.GridBagLayout; java.awt.Insets; java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.BorderFactory; javax.swing.JButton; javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JOptionPane; javax.swing.JPanel; javax.swing.JScrollPane; javax.swing.JTable; javax.swing.JTextField; javax.swing.SwingConstants; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionListener; javax.swing.event.TableModelEvent; javax.swing.event.TableModelListener;
public class App extends JFrame implements ActionListener, ListSelectionListener, TableModelListener, PaginadorEventListener{ private static final long serialVersionUID = 1L; protected protected protected protected protected static static static static static final final final final final String String String String String CERRAR="CERRAR"; NUEVO="NUEVO"; AGREGAR="AGREGAR"; MODIFICAR="MODIFICAR"; ELIMINAR="ELIMINAR";
protected JTextField jtfProductoCodigo=new JTextField(15); protected JCheckBox jchbProductoDisponible=new JCheckBox(); protected JTextField jtfProductoNombre=new JTextField(15); protected JButton jbNuevo=new JButton("Nuevo"); protected JButton jbAgregarModificar=new JButton("AgregarModificar"); protected JButton jbEliminar=new JButton("Eliminar"); protected Producto producto=new Producto(); protected ProductosTableModelPaginado tmpProductos=new ProductosTableModelPaginado(); protected Paginador cPaginadorSuperior;
protected Paginador cPaginadorInferior; protected JScrollPane jsp=new JScrollPane(); protected JTable jtTabla = new JTable(); protected JButton jbCerrar = new JButton("Cerrar");
public App(){ this.setTitle("Ejemplo 1 DAO: JDBC"); this.setLayout(new BorderLayout()); JPanel jpDatos = new JPanel(); jpDatos.setLayout(new BorderLayout()); this.add(jpDatos,BorderLayout.PAGE_START); jpDatos.setBorder(BorderFactory.createTitledBorder("Datos del Producto")); /*formulario*/ JPanel jpFormulario = new JPanel(); jpFormulario.setLayout(new GridBagLayout()); jpDatos.add(jpFormulario,BorderLayout.CENTER); jpFormulario.add(new JLabel("Cdigo: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoCodigo,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(jchbProductoDisponible,new GridBagConstraints(2,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(new JLabel("Nombre: ",SwingConstants.RIGHT),new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoNombre,new GridBagConstraints(1,1,2,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); JPanel jpBarraBotonesFormulario = new JPanel(); jpBarraBotonesFormulario.setLayout(new FlowLayout(FlowLayout.RIGHT)); jpDatos.add(jpBarraBotonesFormulario,BorderLayout.SOUTH); jpBarraBotonesFormulario.add(jbNuevo); jbNuevo.addActionListener(this); jbNuevo.setVisible(false); jpBarraBotonesFormulario.add(jbAgregarModificar); jbAgregarModificar.addActionListener(this); jpBarraBotonesFormulario.add(jbEliminar); jbEliminar.addActionListener(this); /*fin datos*/
/*detalle*/ JPanel jpDetalle = new JPanel(); this.add(jpDetalle,BorderLayout.CENTER); jpDetalle.setBorder(BorderFactory.createTitledBorder("Lista de Productos")); jpDetalle.setLayout(new BorderLayout()); cPaginadorSuperior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorSuperior,BorderLayout.PAGE_START); cPaginadorSuperior.addPaginadorEventListener(this);//llama al actualizar tabla, redibuja la tabla cPaginadorSuperior.inicio(); //hace la consulta jpDetalle.add(jsp,BorderLayout.CENTER); jtTabla.setModel(tmpProductos); jtTabla.setAutoCreateRowSorter(true); jtTabla.getSelectionModel().addListSelectionListener(this); jtTabla.setPreferredScrollableViewportSize(new Dimension(500, 85)); jtTabla.setFillsViewportHeight(true); jsp.setViewportView(jtTabla); /* cPaginadorInferior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorInferior,BorderLayout.PAGE_END); */ /*fin de detalle*/ JPanel jpBarraBotonesInferior = new JPanel(); jpBarraBotonesInferior.setLayout(new FlowLayout(FlowLayout.RIGHT)); this.add(jpBarraBotonesInferior, BorderLayout.PAGE_END); jpBarraBotonesInferior.add(jbCerrar); jbCerrar.setActionCommand(App.CERRAR); jbCerrar.addActionListener(this); nuevoProducto(); this.pack(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && App.CERRAR.equals(e.getActionCommand())){ System.exit(0); }else if(e!=null && App.NUEVO.equals(e.getActionCommand())){ nuevoProducto(); actualizarTabla(); }else if(e!=null && App.AGREGAR.equals(e.getActionCommand())){ addProducto(); nuevoProducto(); actualizarTabla();
}else if(e!=null && App.MODIFICAR.equals(e.getActionCommand())){ modificarProducto(); nuevoProducto(); actualizarTabla(); }else if(e!=null && App.ELIMINAR.equals(e.getActionCommand())){ eliminarProducto(); nuevoProducto(); actualizarTabla(); } } @Override public void valueChanged(ListSelectionEvent arg0) { int viewRow = jtTabla.getSelectedRow(); if (viewRow < 0) { System.out.println(""); } else { int modelRow = jtTabla.convertRowIndexToModel(viewRow); System.out.println(String.format("Selected Row in view: %d. " +"Selected Row in model: %d.",viewRow, modelRow)); seleccionarProducto(); } } @Override public void tableChanged(TableModelEvent event) { int row = event.getFirstRow(); int column = event.getColumn(); ProductosTableModelPaginado model = (ProductosTableModelPaginado) event.getSource(); String columnName = model.getColumnName(column); Producto data = (Producto)model.getValueAt(row, column); System.out.println(data.getId()+"-"+data.getCodigo()+""+data.getNombre()+"-"+columnName); } @Override public void paginadorEventOcurrido(PaginadorEvent paginadorEvent) { actualizarTabla(); } public void seleccionarProducto(){ this.producto=tmpProductos.productos.get(jtTabla.getSelectedRow()); if(producto!=null){ jtfProductoCodigo.setText(producto.getCodigo().toString()); jtfProductoNombre.setText(producto.getNombre()); jchbProductoDisponible.setSelected(producto.getDisponible()); } if(this.producto!=null){ jbNuevo.setVisible(true); jbNuevo.setActionCommand(NUEVO);;
jbAgregarModificar.setText("Modificar"); jbAgregarModificar.setActionCommand(MODIFICAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(ELIMINAR); }else{ nuevoProducto(); } } public void nuevoProducto(){ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jbNuevo.setVisible(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Limpiar"); jbEliminar.setActionCommand(App.NUEVO); } public void addProducto(){ producto = new Producto(); Integer codigo=null; if(jtfProductoCodigo.getText()!=null && !jtfProductoCodigo.getText().equals("") && !jtfProductoCodigo.getText().contains(" ")){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected()); try{ tmpProductos.agregarProducto(producto); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } /*limpia el formulario*/ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jchbProductoDisponible.setSelected(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(App.ELIMINAR); cPaginadorSuperior.inicio(); } public void modificarProducto(){
if(producto!=null){ Integer codigo=null; if(jtfProductoCodigo.getText()!=null){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected()); } try{ tmpProductos.modificarProducto(jtTabla.getSelectedRow(), producto); cPaginadorSuperior.inicio(); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } } public void eliminarProducto(){ try{ tmpProductos.eliminarProducto(jtTabla.getSelectedRow()); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } this.jtTabla.repaint(); cPaginadorSuperior.inicio(); } public void actualizarTabla(){ jsp.remove(jtTabla); jtTabla.setModel(tmpProductos); jtTabla.repaint(); jsp.setViewportView(jtTabla); jsp.revalidate(); } public static void main(String [] args){ javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { App app = new App(); app.setVisible(true); } }); } }
ProductosTableModel.java
/*
* * * * * * * * * *
@autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.gui.tablemodel; import import import import import import import import import java.util.ArrayList; java.util.List; javax.swing.event.TableModelListener; javax.swing.table.TableModel; ar.com.hdcm.producto.dao.ProductoDAO; ar.com.hdcm.producto.dao.exception.DAOException; ar.com.hdcm.producto.pgbddao.util.DAOFactory; ar.com.hdcm.producto.modelo.Producto; ar.com.hdcm.swing.AbstractPaginable;
public class ProductosTableModelPaginado extends AbstractPaginable implements TableModel{ public List<Producto> productos = new ArrayList<Producto>(); public List<String> nombreColumnas = new ArrayList<String>(); public List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>(); public ProductoDAO productoDao = DAOFactory.getDAOFactory(DAOFactory.PGDB).getProductoDAO(); public ProductosTableModelPaginado(){ nombreColumnas.add("Cdigo"); nombreColumnas.add("Nombre"); nombreColumnas.add("Disponible"); } @Override public Class<?> getColumnClass(int arg0) { Object obj=getValueAt(0, arg0); if(obj!=null) return getValueAt(0, arg0).getClass(); else return null; } @Override public int getColumnCount() { if(nombreColumnas!=null){ return nombreColumnas.size(); } return 0;
} @Override public String getColumnName(int arg0) { if(nombreColumnas!=null && arg0>=0 && nombreColumnas.size()>arg0){ return nombreColumnas.get(arg0); } return null; } @Override public int getRowCount() { if(productos!=null){ return productos.size(); } return 0; } @Override public Object getValueAt(int arg0, int arg1) { if(productos!=null && arg0>=0 && arg1>=0 && productos.size()>arg0){ Producto producto=productos.get(arg0); switch(arg1){ case 0: return producto.getCodigo(); case 1: return producto.getNombre(); case 2: return producto.getDisponible(); } } return null; } @Override public void setValueAt(Object arg0, int arg1, int arg2) { if(productos!=null && arg1>=0 && arg2>=0 && productos.size()>arg1){ Producto producto=productos.get(arg1); switch(arg2){ case 0: Integer codigoNuevo=null; if(arg0!=null){ codigoNuevo=(Integer)arg0; } producto.setCodigo(codigoNuevo); break; case 1: String nombreNuevo=null; if(arg0!=null){ nombreNuevo=(String)arg0; } producto.setNombre(nombreNuevo); break; case 2: Boolean disponible=false; if(arg0!=null){ disponible=(Boolean)arg0; }
producto.setDisponible(disponible); break; } } } @Override public boolean isCellEditable(int arg0, int arg1) { return false; } @Override public void removeTableModelListener(TableModelListener arg0) { tableModelListeners.add(arg0); } @Override public void addTableModelListener(TableModelListener arg0) { tableModelListeners.remove(arg0); } @Override public void actualizar(int indice,int cantidadRenglones) throws DAOException{ productos=productoDao.findAll(indice, cantidadRenglones); } @Override public int getCantidadRenglones() { return productos.size(); } public void agregarProducto(Producto producto) throws DAOException,Exception{ producto.setId(productoDao.create(producto)); } public void modificarProducto(Integer indice, Producto productoModificado) throws DAOException,Exception{ productoModificado.setId(productoDao.update(productoModificado)); Producto productoNoModificado=productos.get(indice); if(productoModificado!=null && productoModificado.getId()!=null){ productoNoModificado.setId(productoModificado.getId()); productoNoModificado.setCodigo(productoModificado.getCodigo()); productoNoModificado.setDisponible(productoModificado.getDisponible() ); } } public void eliminarProducto(int indice) throws DAOException,Exception{ Producto producto = productos.get(indice);
productoDao.remove(producto.getId()); } }
package ar.com.hdcm.swing; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import ar.com.hdcm.swing.event.PaginadorEvent; import ar.com.hdcm.swing.listener.PaginadorEventListener; public class Paginador extends JPanel implements ActionListener{ private static final long serialVersionUID = 1L; protected javax.swing.event.EventListenerList listenerList =new javax.swing.event.EventListenerList(); private static final String INICIO="INICIO"; private static final String ANTERIOR="ANTERIOR"; private static final String SIGUIENTE="SIGUIENTE"; private private private private JPanel jpBotonesPaginas = new JPanel(); JButton jbInicio = new JButton("|<"); JButton jbAnterior = new JButton("<"); JButton jbSiguiente = new JButton(">");
jbInicio.setActionCommand(INICIO); jbInicio.addActionListener(this); this.add(jbAnterior); jbAnterior.setActionCommand(ANTERIOR); jbAnterior.addActionListener(this); jpBotonesPaginas.setLayout(new FlowLayout()); this.add(jbSiguiente); jbSiguiente.setActionCommand(SIGUIENTE); jbSiguiente.addActionListener(this); this.paginable=paginable; inicio(); } public void inicio(){ jbInicio.setEnabled(false); jbAnterior.setEnabled(false); jbSiguiente.setEnabled(true); try{ paginable.inicio(); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } } protected void anterior() throws Exception{ if(paginable.anterior()){ jbInicio.setEnabled(true); jbAnterior.setEnabled(true); jbSiguiente.setEnabled(true); }else{ jbInicio.setEnabled(false); jbAnterior.setEnabled(false); jbSiguiente.setEnabled(true); } } protected void siguiente() throws Exception{ if(paginable.siguiente()){ jbInicio.setEnabled(true); jbAnterior.setEnabled(true); jbSiguiente.setEnabled(true); }else { jbSiguiente.setEnabled(false); } } @Override public void actionPerformed(ActionEvent event) { try{ if(event!=null && INICIO.equals(event.getActionCommand())){
inicio(); }else if(event!=null && ANTERIOR.equals(event.getActionCommand())){ anterior(); }else if(event!=null && SIGUIENTE.equals(event.getActionCommand())){ siguiente(); } PaginadorEvent paginadorEvent= new PaginadorEvent(this); this.firePaginadorEvent(paginadorEvent); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } } public void addPaginadorEventListener(PaginadorEventListener listener) { listenerList.add(PaginadorEventListener.class, listener); } public void removePaginadorEventListener(PaginadorEventListener listener) { listenerList.remove(PaginadorEventListener.class, listener); } void firePaginadorEvent(PaginadorEvent paginadorEvent) { Object[] listeners = listenerList.getListenerList(); for (int i=0; i<listeners.length; i+=2) { if (listeners[i]==PaginadorEventListener.class) { ((PaginadorEventListener)listeners[i+1]).paginadorEventOcurrido(paginadorEven t); } } } }
Paginable.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing;
public interface Paginable { public int getCantidadRenglones(); public void actualizar(int indice,int cantidadRenglones) throws Exception; public int getIndiceRenglon(); public void setIndiceRenglon(int indiceRenglon); public int getMaxCantidadRenglones(); public void setMaxCantidadRenglones(int maxCantidadRenglones); public void inicio() throws Exception; public boolean anterior() throws Exception; public boolean siguiente() throws Exception; }
AbstractPaginable.java
package ar.com.hdcm.swing; public abstract class AbstractPaginable implements Paginable{ private int indiceRenglon=0; private int maxCantidadRenglones=5; @Override public int getIndiceRenglon() { return indiceRenglon; } @Override public void setIndiceRenglon(int indiceRenglon) { this.indiceRenglon=indiceRenglon; } @Override public int getMaxCantidadRenglones() { return maxCantidadRenglones; } @Override public void setMaxCantidadRenglones(int maxCantidadRenglones) { this.maxCantidadRenglones=maxCantidadRenglones; } @Override public void inicio() throws Exception { indiceRenglon=0; actualizar(indiceRenglon,maxCantidadRenglones); } @Override public boolean anterior() throws Exception { indiceRenglon=indiceRenglon-maxCantidadRenglones; boolean tieneAnterior=indiceRenglon>=maxCantidadRenglones; if(!tieneAnterior){ indiceRenglon=0; }
actualizar(indiceRenglon,maxCantidadRenglones); return tieneAnterior; } @Override public boolean siguiente() throws Exception { boolean tieneSiguiente=!(getCantidadRenglones() < maxCantidadRenglones); if(tieneSiguiente){ indiceRenglon=indiceRenglon+getCantidadRenglones(); actualizar(indiceRenglon,maxCantidadRenglones); } return tieneSiguiente; } }
PaginadorEventListener.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing.listener; import java.util.EventListener; import ar.com.hdcm.swing.event.PaginadorEvent; public interface PaginadorEventListener extends EventListener { public void paginadorEventOcurrido(PaginadorEvent paginadorEvent); }
PaginadorEvent.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.swing.event; import java.util.EventObject; public class PaginadorEvent extends EventObject{ private static final long serialVersionUID = 1L; public PaginadorEvent(Object source){ super(source); } }
package ar.com.hdcm.producto.modelo; public class Producto { private Integer id; private Integer codigo; private String nombre; private Boolean disponible=false; public Producto(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } public String getNombre() { return nombre; }
public void setNombre(String nombre) { this.nombre = nombre; } public Boolean getDisponible() { if(disponible!=null) return disponible; else return false; } public void setDisponible(Boolean disponible) { this.disponible = disponible; } }
DAOFactory.java
package ar.com.hdcm.producto.pgbddao.util; import ar.com.hdcm.producto.dao.ProductoDAO; public abstract class DAOFactory { //lista de daos soportados por el factory public static final int PGDB = 1; //lista de metodos para cada dao que puede ser creado. //los factories deberan implementar estos metodos. public abstract ProductoDAO getProductoDAO(); public static DAOFactory getDAOFactory(int witchFactory) { try { switch(witchFactory){ case PGDB: return new PgdbDAOFactory(); default: return null; } } catch (Exception ex) { throw new RuntimeException("Couldn't create DAOFactory: "); } } }
PgdbProductoDAO.java
/* * @autor: * *
* @e-mail: * [email protected] * * @sitio web: * http://hdcm.sytes.net * http://hdcm.com.ar * */ package ar.com.hdcm.producto.pgbddao; import import import import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; java.util.ArrayList; java.util.List;
import ar.com.hdcm.producto.dao.ProductoDAO; import ar.com.hdcm.producto.modelo.Producto; import ar.com.hdcm.producto.pgbddao.exception.PgdbProductoDAOException; public class PgdbProductoDAO implements ProductoDAO { private static final String INSERT_SQL =" insert into public.productos (codigo, nombre, disponible) values (?,?,?)"; private static final String UPDATE_SQL =" update public.productos set codigo=?, nombre=?, disponible=? where id=?"; private static final String DELETE_SQL =" delete from public.productos where id=?"; private static final String FIND_SQL = " select o.id, o.codigo, o.nombre, o.disponible " +" from public.productos as o "; private static final String FIND_ALL_SQL = id,codigo,nombre,disponible " " select " select
public static final String bdUrl = "jdbc:postgresql://localhost/productos?user=productoadmin&password=productoad min"; public static final String url= "jdbc:postgresql://localhost/productos"; public PgdbProductoDAO(){ super(); } public Connection getConnection() throws SQLException { Connection connection = DriverManager.getConnection(bdUrl); return connection; }
@Override public Integer create(Producto producto) throws PgdbProductoDAOException{ if(producto!=null){ Connection conn = null; PreparedStatement sth = null; ResultSet rs =null; try { conn = getConnection(); //Statement.NO_GENERATED_KEYS por el id esta definido con serial. sth = conn.prepareStatement(INSERT_SQL,ResultSet.TYPE_SCROLL_INSENSITIVE,Statement. NO_GENERATED_KEYS); sth.clearParameters(); sth.setInt(1, producto.getCodigo()); sth.setString(2, producto.getNombre()); sth.setBoolean(3, producto.getDisponible()); sth.executeUpdate(); rs=sth.getGeneratedKeys(); if(rs.next()){ Integer id = (Integer) rs.getInt(1); producto.setId(id); } }catch (Exception e) { throw new PgdbProductoDAOException(PgdbProductoDAOException.CREATE, INSERT_SQL,e); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ throw new PgdbProductoDAOException(PgdbProductoDAOException.CREATE, INSERT_SQL,e); } } return producto.getId(); } return null; } @Override public Integer update(Producto producto) throws PgdbProductoDAOException{ Connection conn = null; PreparedStatement sth = null; Integer idUpdate=null; ResultSet rs=null; try { conn = getConnection(); sth = conn.prepareStatement(UPDATE_SQL);
sth.clearParameters(); sth.setInt(1, producto.getCodigo()); sth.setString(2, producto.getNombre()); sth.setBoolean(3, producto.getDisponible()); //id del producto a updatear sth.setInt(4, producto.getId()); sth.executeUpdate(); rs=sth.getGeneratedKeys(); if(rs.next()){ idUpdate = (Integer) rs.getInt(1); producto.setId(idUpdate); } }catch (Exception e) { throw new PgdbProductoDAOException(PgdbProductoDAOException.UPDATE, UPDATE_SQL,e); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ throw new PgdbProductoDAOException(PgdbProductoDAOException.UPDATE, UPDATE_SQL,e); } } return idUpdate; } @Override public Integer remove(Integer id) throws PgdbProductoDAOException{ Connection conn = null; PreparedStatement sth = null; Integer idUpdate=null; ResultSet rs=null; try { conn = getConnection(); sth = conn.prepareStatement(DELETE_SQL); sth.clearParameters(); sth.setInt(1, id); sth.executeUpdate(); rs=sth.getGeneratedKeys(); if(rs.next()){ idUpdate = (Integer) rs.getInt(1); } }catch (Exception e) { throw new PgdbProductoDAOException(PgdbProductoDAOException.REMOVE, DELETE_SQL,e); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ throw new PgdbProductoDAOException(PgdbProductoDAOException.REMOVE, DELETE_SQL,e); }
} return idUpdate; } @Override public Producto find(Integer id) throws PgdbProductoDAOException{ Producto producto=null; Connection conn = null; Statement sth = null; try { conn = getConnection(); String sql=FIND_SQL.replace("?", id.toString()); sth = conn.createStatement(); ResultSet rs = sth.executeQuery(sql); rs.next(); producto = new Producto(); int idActual=rs.getInt("id"); if(idActual>0) producto.setId(idActual); int codigo=rs.getInt("codigo"); if(codigo>0) producto.setCodigo(codigo); producto.setNombre(rs.getString("nombre")); producto.setDisponible(rs.getBoolean("disponible")); }catch (SQLException e) { throw new PgdbProductoDAOException(PgdbProductoDAOException.FIND, FIND_ALL_SQL,e); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ throw new PgdbProductoDAOException(PgdbProductoDAOException.FIND, FIND_ALL_SQL,e); } } return producto; } @Override public List<Producto> findAll() throws PgdbProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); Connection conn = null; Statement sth=null; ResultSet rs =null; try { conn = getConnection(); sth = conn.createStatement(); rs = sth.executeQuery(FIND_ALL_SQL); while(rs.next()) { Producto producto = new Producto(); int idActual=rs.getInt("id"); if(idActual>0)
producto.setId(idActual); int codigo=rs.getInt("codigo"); if(codigo>0) producto.setCodigo(codigo); producto.setNombre(rs.getString("nombre")); producto.setDisponible(rs.getBoolean("disponible")); productos.add(producto); } }catch (SQLException e) { throw new PgdbProductoDAOException(PgdbProductoDAOException.FINDALL_PAGINADO,FIND_ALL_S QL_PAGINADO,e); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ throw new PgdbProductoDAOException(PgdbProductoDAOException.FINDALL_PAGINADO, FIND_ALL_SQL_PAGINADO,e); } } return productos; } @Override public List<Producto> findAll(int indice,int cantidadRenglones) throws PgdbProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); Connection conn = null; Statement sth=null; ResultSet rs=null; try { conn = getConnection(); //http://stackoverflow.com/questions/4259529/scrollable-resultsetjdbc-postgresql String sql=""; sql=sql.replace("", FIND_ALL_SQL_PAGINADO); sql=sql.replace("?1", Integer.toString(cantidadRenglones)); sql=sql.replace("?2", Integer.toString(indice)); sth = conn.createStatement();//ResultSet.TYPE_SCROLL_INSENSITIVE,Statement.NO_GENER ATED_KEYS); //sth.setInt(1, cantidadRenglones); //sth.setInt(2, indice); rs = sth.executeQuery(sql); while(rs.next()) { Producto producto = new Producto(); int idActual=rs.getInt("id"); if(idActual>0) producto.setId(idActual); int codigo=rs.getInt("codigo");
if(codigo>0) producto.setCodigo(codigo); producto.setNombre(rs.getString("nombre")); producto.setDisponible(rs.getBoolean("disponible")); //http://es.wikipedia.org/wiki/SQLJ productos.add(producto); } }catch (Exception e) { e.printStackTrace(); } finally { try{ if(!conn.isClosed()) conn.close(); }catch(Exception e){ e.printStackTrace(); } } return productos; } } /* * org.postgresql.util.PSQLException: This ResultSet is closed. at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSe t.java:2674) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java: 1806) at pgdao.PgdbProductoDAO.findAll(PgdbProductoDAO.java:225) at tablemodel.ProductosTableModel.actualizar(ProductosTableModel.java:129) at custom.componente.Paginador.actionPerformed(Paginador.java:126) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:38 7) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener. java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3255) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java: 269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184 ) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java: 174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) * */
PgdbProductoDAOException.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.pgbddao.exception; import ar.com.hdcm.producto.dao.exception.DAOException; public class PgdbProductoDAOException extends DAOException { private static final long serialVersionUID = 1L; public PgdbProductoDAOException(String tipo, String sentenciaSQL,Exception e) { super(tipo, sentenciaSQL, e); System.out.println("-"+tipo); System.out.println("-"+sentenciaSQL); e.printStackTrace(); System.out.println("-"); } }
ProductoDAO.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.dao; import java.util.List; import ar.com.hdcm.producto.dao.exception.DAOException; import ar.com.hdcm.producto.modelo.Producto; public interface ProductoDAO { public Integer create(Producto producto) throws DAOException; public Integer update(Producto producto) throws DAOException; public Integer remove(Integer id) throws DAOException; public Producto find(Integer id) throws DAOException; public List<Producto> findAll() throws DAOException; public List<Producto> findAll(int indice,int cantidadRenglones) throws DAOException; }
DAOException.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.dao.exception; public class DAOException extends Exception{ private static final long serialVersionUID = 1L; public static final String CREATE="Error al crear el Registro."; public static final String UPDATE="Error al modificar el Registro."; public static final String REMOVE="Error al eliminar el Registro.";
public static final String FIND="Error, registro inexistente."; public static final String FINDALL="Error al buscar todos los registros"; public static final String FINDALL_PAGINADO="Error al buscar todos los registros"; public String mensaje; public String detalle; public String sentenciaSQL; public DAOException(String tipo, String sentenciaSQL,Exception e){ this.mensaje=tipo; this.detalle=e.getMessage(); this.sentenciaSQL=sentenciaSQL; } }
2. Ejemplo 2 - Hibernate: Tomando el proyecto anterior pero ahora implemento la persistencia por medio de Hibernate.
package ar.com.hdcm.producto.gui.app; import import import import import import import import java.awt.BorderLayout; java.awt.Dimension; java.awt.FlowLayout; java.awt.GridBagConstraints; java.awt.GridBagLayout; java.awt.Insets; java.awt.event.ActionEvent; java.awt.event.ActionListener;
import import import import import import import import import import import import import
javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JOptionPane; javax.swing.JPanel; javax.swing.JScrollPane; javax.swing.JTable; javax.swing.JTextField; javax.swing.SwingConstants; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionListener; javax.swing.event.TableModelEvent; javax.swing.event.TableModelListener;
import ar.com.hdcm.producto.dao.exception.DAOException; import ar.com.hdcm.producto.gui.tablemodel.ProductosTableModelPaginado; import ar.com.hdcm.producto.modelo.Producto; import ar.com.hdcm.swing.Paginador; import ar.com.hdcm.swing.event.PaginadorEvent; import ar.com.hdcm.swing.listener.PaginadorEventListener; public class App extends JFrame implements ActionListener, ListSelectionListener, TableModelListener, PaginadorEventListener{ private static final long serialVersionUID = 1L; protected protected protected protected protected static static static static static final final final final final String String String String String CERRAR="CERRAR"; NUEVO="NUEVO"; AGREGAR="AGREGAR"; MODIFICAR="MODIFICAR"; ELIMINAR="ELIMINAR";
protected JTextField jtfProductoCodigo=new JTextField(15); protected JCheckBox jchbProductoDisponible=new JCheckBox(); protected JTextField jtfProductoNombre=new JTextField(15); protected JButton jbNuevo=new JButton("Nuevo"); protected JButton jbAgregarModificar=new JButton("AgregarModificar"); protected JButton jbEliminar=new JButton("Eliminar"); protected Producto producto=new Producto(); protected ProductosTableModelPaginado tmpProductos=new ProductosTableModelPaginado(); protected Paginador cPaginadorSuperior; protected Paginador cPaginadorInferior; protected JScrollPane jsp=new JScrollPane(); protected JTable jtTabla = new JTable(); protected JButton jbCerrar = new JButton("Cerrar");
public App(){ this.setTitle("Ejemplo 2 DAO: Hibernate"); this.setLayout(new BorderLayout()); JPanel jpDatos = new JPanel(); jpDatos.setLayout(new BorderLayout()); this.add(jpDatos,BorderLayout.PAGE_START); jpDatos.setBorder(BorderFactory.createTitledBorder("Datos del Producto")); /*formulario*/ JPanel jpFormulario = new JPanel(); jpFormulario.setLayout(new GridBagLayout()); jpDatos.add(jpFormulario,BorderLayout.CENTER); jpFormulario.add(new JLabel("Cdigo: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoCodigo,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(jchbProductoDisponible,new GridBagConstraints(2,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(new JLabel("Nombre: ",SwingConstants.RIGHT),new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoNombre,new GridBagConstraints(1,1,2,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); JPanel jpBarraBotonesFormulario = new JPanel(); jpBarraBotonesFormulario.setLayout(new FlowLayout(FlowLayout.RIGHT)); jpDatos.add(jpBarraBotonesFormulario,BorderLayout.SOUTH); jpBarraBotonesFormulario.add(jbNuevo); jbNuevo.addActionListener(this); jbNuevo.setVisible(false); jpBarraBotonesFormulario.add(jbAgregarModificar); jbAgregarModificar.addActionListener(this); jpBarraBotonesFormulario.add(jbEliminar); jbEliminar.addActionListener(this); /*fin datos*/ /*detalle*/
JPanel jpDetalle = new JPanel(); this.add(jpDetalle,BorderLayout.CENTER); jpDetalle.setBorder(BorderFactory.createTitledBorder("Lis ta de Productos")); jpDetalle.setLayout(new BorderLayout()); cPaginadorSuperior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorSuperior,BorderLayout.PAGE_START) ; cPaginadorSuperior.addPaginadorEventListener(this);//llam a al actualizar tabla, redibuja la tabla cPaginadorSuperior.inicio(); //hace la consulta jpDetalle.add(jsp,BorderLayout.CENTER); jtTabla.setModel(tmpProductos); jtTabla.setAutoCreateRowSorter(true); jtTabla.getSelectionModel().addListSelectionListener(this ); jtTabla.setPreferredScrollableViewportSize(new Dimension(500, 85)); jtTabla.setFillsViewportHeight(true); jsp.setViewportView(jtTabla); /* cPaginadorInferior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorInferior,BorderLayout.PAGE_END); */ /*fin de detalle*/ JPanel jpBarraBotonesInferior = new JPanel(); jpBarraBotonesInferior.setLayout(new FlowLayout(FlowLayout.RIGHT)); this.add(jpBarraBotonesInferior, BorderLayout.PAGE_END); jpBarraBotonesInferior.add(jbCerrar); jbCerrar.setActionCommand(App.CERRAR); jbCerrar.addActionListener(this); nuevoProducto(); this.pack(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && App.CERRAR.equals(e.getActionCommand())){ System.exit(0); }else if(e!=null &&
App.NUEVO.equals(e.getActionCommand())){ nuevoProducto(); actualizarTabla(); }else if(e!=null && App.AGREGAR.equals(e.getActionCommand())){ addProducto(); nuevoProducto(); actualizarTabla(); }else if(e!=null && App.MODIFICAR.equals(e.getActionCommand())){ modificarProducto(); nuevoProducto(); actualizarTabla(); }else if(e!=null && App.ELIMINAR.equals(e.getActionCommand())){ eliminarProducto(); nuevoProducto(); actualizarTabla(); } } @Override public void valueChanged(ListSelectionEvent arg0) { int viewRow = jtTabla.getSelectedRow(); if (viewRow < 0) { System.out.println(""); } else { int modelRow = jtTabla.convertRowIndexToModel(viewRow); System.out.println(String.format("Selected Row in view: %d. " +"Selected Row in model: %d.",viewRow, modelRow)); seleccionarProducto(); } } @Override public void tableChanged(TableModelEvent event) { int row = event.getFirstRow(); int column = event.getColumn(); ProductosTableModelPaginado model = (ProductosTableModelPaginado) event.getSource(); String columnName = model.getColumnName(column); Producto data = (Producto)model.getValueAt(row, column); System.out.println(data.getId()+""+data.getCodigo()+"-"+data.getNombre()+"-"+columnName); } @Override public void paginadorEventOcurrido(PaginadorEvent paginadorEvent) { actualizarTabla(); } public void seleccionarProducto(){ this.producto=tmpProductos.productos.get(jtTabla.getSelec
tedRow()); if(producto!=null){ jtfProductoCodigo.setText(producto.getCodigo().toString() ); jtfProductoNombre.setText(producto.getNombre()); jchbProductoDisponible.setSelected(producto.getDisponible ()); } if(this.producto!=null){ jbNuevo.setVisible(true); jbNuevo.setActionCommand(NUEVO);; jbAgregarModificar.setText("Modificar"); jbAgregarModificar.setActionCommand(MODIFICAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(ELIMINAR); }else{ nuevoProducto(); } } public void nuevoProducto(){ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jbNuevo.setVisible(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Limpiar"); jbEliminar.setActionCommand(App.NUEVO); } public void addProducto(){ producto = new Producto(); Integer codigo=null; if(jtfProductoCodigo.getText()!=null && !jtfProductoCodigo.getText().equals("") && !jtfProductoCodigo.getText().contains(" ")){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected( )); try{ tmpProductos.agregarProducto(producto); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje);
}catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } /*limpia el formulario*/ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jchbProductoDisponible.setSelected(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(App.ELIMINAR); cPaginadorSuperior.inicio(); } public void modificarProducto(){ if(producto!=null){ Integer codigo=null; if(jtfProductoCodigo.getText()!=null){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected( )); } try{ tmpProductos.modificarProducto(jtTabla.getSelectedRow(), producto); cPaginadorSuperior.inicio(); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } } public void eliminarProducto(){ try{ tmpProductos.eliminarProducto(jtTabla.getSelectedRow()); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this,
e.getMessage()); } this.jtTabla.repaint(); cPaginadorSuperior.inicio(); } public void actualizarTabla(){ jsp.remove(jtTabla); jtTabla.setModel(tmpProductos); jtTabla.repaint(); jsp.setViewportView(jtTabla); jsp.revalidate(); } public static void main(String [] args){ javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { App app = new App(); app.setVisible(true); } }); } }
ProductosTableModel.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.gui.tablemodel; import import import import import import import import import java.util.ArrayList; java.util.List; javax.swing.event.TableModelListener; javax.swing.table.TableModel; ar.com.hdcm.producto.dao.ProductoDAO; ar.com.hdcm.producto.dao.exception.DAOException; ar.com.hdcm.producto.hbdao.util.DAOFactory; ar.com.hdcm.producto.modelo.Producto; ar.com.hdcm.swing.AbstractPaginable;
public class ProductosTableModelPaginado extends AbstractPaginable implements TableModel{ public List<Producto> productos = new
ArrayList<Producto>(); public List<String> nombreColumnas = new ArrayList<String>(); public List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>(); public ProductoDAO productoDao = DAOFactory.getDAOFactory(ar.com.hdcm.producto.hbdao.util.DAOFacto ry.HIBERNATE).getProductoDAO(); public ProductosTableModelPaginado(){ nombreColumnas.add("Cdigo"); nombreColumnas.add("Nombre"); nombreColumnas.add("Disponible"); } @Override public Class<?> getColumnClass(int arg0) { return getValueAt(0, arg0).getClass(); } @Override public int getColumnCount() { if(nombreColumnas!=null){ return nombreColumnas.size(); } return 0; } @Override public String getColumnName(int arg0) { if(nombreColumnas!=null && arg0>=0 && nombreColumnas.size()>arg0){ return nombreColumnas.get(arg0); } return null; } @Override public int getRowCount() { if(productos!=null){ return productos.size(); } return 0; } @Override public Object getValueAt(int arg0, int arg1) { if(productos!=null && arg0>=0 && arg1>=0 && productos.size()>arg0){ Producto producto=productos.get(arg0); switch(arg1){ case 0: return producto.getCodigo(); case 1: return producto.getNombre(); case 2: return
producto.getDisponible(); } } return null; } @Override public void setValueAt(Object arg0, int arg1, int arg2) { if(productos!=null && arg1>=0 && arg2>=0 && productos.size()>arg1){ Producto producto=productos.get(arg1); switch(arg2){ case 0: Integer codigoNuevo=null; if(arg0!=null){ codigoNuevo=(Integer)arg0; } producto.setCodigo(codigoNuevo); break; case 1: String nombreNuevo=null; if(arg0!=null){ nombreNuevo=(String)arg0; } producto.setNombre(nombreNuevo); break; case 2: Boolean disponible=false; if(arg0!=null){ disponible=(Boolean)arg0; } producto.setDisponible(disponible); break; } } } @Override public boolean isCellEditable(int arg0, int arg1) { return false; } @Override public void removeTableModelListener(TableModelListener arg0) { tableModelListeners.add(arg0); } @Override public void addTableModelListener(TableModelListener arg0) { tableModelListeners.remove(arg0); }
@Override public void actualizar(int indice,int cantidadRenglones) throws DAOException{ productos=productoDao.findAll(indice, cantidadRenglones); } @Override public int getCantidadRenglones() { return productos.size(); } public void agregarProducto(Producto producto) throws DAOException,Exception{ producto.setId(productoDao.create(producto)); } public void modificarProducto(Integer indice, Producto productoModificado) throws DAOException,Exception{ productoModificado.setId(productoDao.update(productoModif icado)); Producto productoNoModificado=productos.get(indice); if(productoModificado!=null && productoModificado.getId()!=null){ productoNoModificado.setId(productoModificado.getId()); productoNoModificado.setCodigo(productoModificado.getCodi go()); productoNoModificado.setDisponible(productoModificado.get Disponible()); } } public void eliminarProducto(int indice) throws DAOException,Exception{ Producto producto = productos.get(indice); productoDao.remove(producto.getId()); } }
//lista de metodos para cada dao que puede ser creado. //los factories deberan implementar estos metodos. public abstract ProductoDAO getProductoDAO(); public static DAOFactory getDAOFactory(int witchFactory) { try { switch(witchFactory){ case HIBERNATE: return new HbDAOFactory(); default: return null; } } catch (Exception ex) { throw new RuntimeException("Couldn't create DAOFactory: "); } } }
HbProductoDAO.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.hbdao; import java.util.ArrayList; import java.util.List; import import import import org.hibernate.Query; org.hibernate.Session; org.hibernate.Transaction; org.hibernate.criterion.Order;
import ar.com.hdcm.producto.modelo.Producto; import ar.com.hdcm.producto.dao.ProductoDAO; import ar.com.hdcm.producto.hbdao.exception.HbProductoDAOException; import ar.com.hdcm.producto.hbdao.util.HibernateUtil; public class HbProductoDAO implements ProductoDAO { public HbProductoDAO(){ super(); }
@Override public Integer create(Producto producto) throws HbProductoDAOException{ if(producto!=null){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { //Java Persistence with Hibernate pg46 Integer id = (Integer) session.save(producto); producto.setId(id); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.CREATE,e); } finally { session.close(); } return producto.getId(); } return null; } @Override public Integer update(Producto producto) throws HbProductoDAOException{ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { producto=(Producto)session.merge(producto); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.UPDATE,e); } finally { session.close(); } return producto.getId(); } @Override public Integer remove(Integer id) throws HbProductoDAOException{ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); Integer idRemove=null; try { Producto producto = (Producto)session.get(Producto.class, id); idRemove=producto.getId();
session.delete(producto); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.REMOVE,e); } finally { session.close(); } return idRemove; } @Override public Producto find(Integer id) throws HbProductoDAOException{ Producto producto=null; Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { producto = (Producto)session.get(Producto.class, id); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.FIND,e); } finally { session.close(); } return producto; } @SuppressWarnings("unchecked") @Override public List<Producto> findAll() throws HbProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); System.out.println(tx.toString()); try { Query query=session.getNamedQuery("Producto.getAll"); productos= query.list(); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.FINDALL,e); } finally { session.close(); }
return productos; } @SuppressWarnings("unchecked") @Override public List<Producto> findAll(int indice,int cantidadRenglones) throws HbProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { Query query=session.getNamedQuery("Producto.getAll"); query.setMaxResults(cantidadRenglones); query.setFirstResult(indice); productos=query.list(); /* * alternativa * SQLQuery query=session.createSQLQuery("select o.id, o.codigo, o.nombre, o.disponible from productos o "); query.setMaxResults(cantidadRenglones); query.setFirstResult(indice); List<Object[]> objs = query.list(); if(objs!=null){ for(Object [] obj:objs){ Producto producto= new Producto(); if(obj[0]!=null){ producto.setId((Integer)obj[0]); } if(obj[1]!=null){ producto.setCodigo((Integer)obj[1]); } if(obj[2]!=null){ producto.setNombre((String)obj[2]); } if(obj[3]!=null){ producto.setDisponible((Boolean)obj[3]); } productos.add(producto); } } */ tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback();
throw new HbProductoDAOException(HbProductoDAOException.FINDALL_PAGINADO,e) ; } finally { session.close(); } if(productos==null) productos = new ArrayList<Producto>(); return productos; } //http://ajava.org/online/hibernate3api/org/hibernate/Cri teria.html //http://ajava.org/online/hibernate3api/org/hibernate/cri terion/Restrictions.html @SuppressWarnings("unchecked") public List<Producto> findAll(int indice,int cantidadRenglones,List filtro) throws HbProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { productos = (List<Producto>) session.createCriteria(Producto.class) .addOrder( Order.asc("codigo") ) .setFirstResult(indice) .setMaxResults(cantidadRenglones).list(); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new HbProductoDAOException(HbProductoDAOException.FINDALL_PAGINADO,e) ; } finally { session.close(); } if(productos==null) productos = new ArrayList<Producto>(); return productos; } }
HbProductoDAOException.java
package ar.com.hdcm.producto.hbdao.exception; import ar.com.hdcm.producto.dao.exception.DAOException; public class HbProductoDAOException extends DAOException {
private static final long serialVersionUID = 1L; public HbProductoDAOException(String tipo, Exception e) { super(tipo, "",e); System.out.println("-"+tipo); System.out.println("-"+sentenciaSQL); e.printStackTrace(); System.out.println("-"); } }
HibernateUtil.java
package ar.com.hdcm.producto.hbdao.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @SuppressWarnings("deprecation") public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { //Create the SessionFactory from hibernate.cfg.xml sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
name="connection.url">jdbc:postgresql://localhost/productos</prop erty> <property name="connection.username">productoadmin</property> <property name="connection.password">productoadmin</property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="current_session_context_class">thread</property> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheP rovider</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping resource="ar/com/hdcm/producto/modelo/producto.hbm.xml"/> </session-factory> </hibernate-configuration>
producto.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ar.com.hdcm.producto.modelo.Producto" table="productos"> <id name="id" column="id" type="integer" > <generator class="sequence"> <param name="sequence">productos_id_seq</param> </generator> </id> <property name="codigo" column="codigo" type="integer"/> <property name="nombre" column="nombre" type="string" length="52"/> <property name="disponible" column="disponible" type="boolean" insert="false"/> </class> <query name="Producto.getAll" > select producto from Producto producto </query> </hibernate-mapping>
Tarballs del proyecto: EjemploHibernate.tar.gz El proyecto necesita unos jar, que fueron construidos desde el "ejemplo 1 -
package ar.com.hdcm.producto.gui.app; import import import import import import import import import import import import import import import import import import import import import import import java.awt.BorderLayout; java.awt.Dimension; java.awt.FlowLayout; java.awt.GridBagConstraints; java.awt.GridBagLayout; java.awt.Insets; java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.BorderFactory; javax.swing.JButton; javax.swing.JCheckBox; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JOptionPane; javax.swing.JPanel; javax.swing.JScrollPane; javax.swing.JTable; javax.swing.JTextField; javax.swing.SwingConstants; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionListener; javax.swing.event.TableModelEvent; javax.swing.event.TableModelListener;
import ar.com.hdcm.swing.event.PaginadorEvent; import ar.com.hdcm.swing.listener.PaginadorEventListener; public class App extends JFrame implements ActionListener, ListSelectionListener, TableModelListener, PaginadorEventListener{ private static final long serialVersionUID = 1L; protected protected protected protected protected static static static static static final final final final final String String String String String CERRAR="CERRAR"; NUEVO="NUEVO"; AGREGAR="AGREGAR"; MODIFICAR="MODIFICAR"; ELIMINAR="ELIMINAR";
protected JTextField jtfProductoCodigo=new JTextField(15); protected JCheckBox jchbProductoDisponible=new JCheckBox(); protected JTextField jtfProductoNombre=new JTextField(15); protected JButton jbNuevo=new JButton("Nuevo"); protected JButton jbAgregarModificar=new JButton("AgregarModificar"); protected JButton jbEliminar=new JButton("Eliminar"); protected Producto producto=new Producto(); protected ProductosTableModelPaginado tmpProductos=new ProductosTableModelPaginado(); protected Paginador cPaginadorSuperior; protected Paginador cPaginadorInferior; protected JScrollPane jsp=new JScrollPane(); protected JTable jtTabla = new JTable(); protected JButton jbCerrar = new JButton("Cerrar");
public App(){ this.setTitle("Ejemplo 3 DAO: JPA"); this.setLayout(new BorderLayout()); JPanel jpDatos = new JPanel(); jpDatos.setLayout(new BorderLayout()); this.add(jpDatos,BorderLayout.PAGE_START); jpDatos.setBorder(BorderFactory.createTitledBorder("Datos del Producto")); /*formulario*/ JPanel jpFormulario = new JPanel(); jpFormulario.setLayout(new GridBagLayout()); jpDatos.add(jpFormulario,BorderLayout.CENTER); jpFormulario.add(new JLabel("Cdigo: ",SwingConstants.RIGHT),new GridBagConstraints(0,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new
Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoCodigo,new GridBagConstraints(1,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(jchbProductoDisponible,new GridBagConstraints(2,0,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); jpFormulario.add(new JLabel("Nombre: ",SwingConstants.RIGHT),new GridBagConstraints(0,1,1,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,10,5),1,1)); jpFormulario.add(jtfProductoNombre,new GridBagConstraints(1,1,2,1,0.0,0.0, GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(5,5,10,5),1,1)); JPanel jpBarraBotonesFormulario = new JPanel(); jpBarraBotonesFormulario.setLayout(new FlowLayout(FlowLayout.RIGHT)); jpDatos.add(jpBarraBotonesFormulario,BorderLayout.SOUTH); jpBarraBotonesFormulario.add(jbNuevo); jbNuevo.addActionListener(this); jbNuevo.setVisible(false); jpBarraBotonesFormulario.add(jbAgregarModificar); jbAgregarModificar.addActionListener(this); jpBarraBotonesFormulario.add(jbEliminar); jbEliminar.addActionListener(this); /*fin datos*/ /*detalle*/ JPanel jpDetalle = new JPanel(); this.add(jpDetalle,BorderLayout.CENTER); jpDetalle.setBorder(BorderFactory.createTitledBorder("Lis ta de Productos")); jpDetalle.setLayout(new BorderLayout()); cPaginadorSuperior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorSuperior,BorderLayout.PAGE_START) ; cPaginadorSuperior.addPaginadorEventListener(this);//llam a al actualizar tabla, redibuja la tabla cPaginadorSuperior.inicio(); //hace la consulta jpDetalle.add(jsp,BorderLayout.CENTER); jtTabla.setModel(tmpProductos); jtTabla.setAutoCreateRowSorter(true); jtTabla.getSelectionModel().addListSelectionListener(this
); jtTabla.setPreferredScrollableViewportSize(new Dimension(500, 85)); jtTabla.setFillsViewportHeight(true); jsp.setViewportView(jtTabla); /* cPaginadorInferior=new Paginador(tmpProductos); jpDetalle.add(cPaginadorInferior,BorderLayout.PAGE_END); */ /*fin de detalle*/ JPanel jpBarraBotonesInferior = new JPanel(); jpBarraBotonesInferior.setLayout(new FlowLayout(FlowLayout.RIGHT)); this.add(jpBarraBotonesInferior, BorderLayout.PAGE_END); jpBarraBotonesInferior.add(jbCerrar); jbCerrar.setActionCommand(App.CERRAR); jbCerrar.addActionListener(this); nuevoProducto(); this.pack(); } @Override public void actionPerformed(ActionEvent e) { if(e!=null && App.CERRAR.equals(e.getActionCommand())){ System.exit(0); }else if(e!=null && App.NUEVO.equals(e.getActionCommand())){ nuevoProducto(); actualizarTabla(); }else if(e!=null && App.AGREGAR.equals(e.getActionCommand())){ addProducto(); nuevoProducto(); actualizarTabla(); }else if(e!=null && App.MODIFICAR.equals(e.getActionCommand())){ modificarProducto(); nuevoProducto(); actualizarTabla(); }else if(e!=null && App.ELIMINAR.equals(e.getActionCommand())){ eliminarProducto(); nuevoProducto(); actualizarTabla(); } }
@Override public void valueChanged(ListSelectionEvent arg0) { int viewRow = jtTabla.getSelectedRow(); if (viewRow < 0) { System.out.println(""); } else { int modelRow = jtTabla.convertRowIndexToModel(viewRow); System.out.println(String.format("Selected Row in view: %d. " +"Selected Row in model: %d.",viewRow, modelRow)); seleccionarProducto(); } } @Override public void tableChanged(TableModelEvent event) { int row = event.getFirstRow(); int column = event.getColumn(); ProductosTableModelPaginado model = (ProductosTableModelPaginado) event.getSource(); String columnName = model.getColumnName(column); Producto data = (Producto)model.getValueAt(row, column); System.out.println(data.getId()+""+data.getCodigo()+"-"+data.getNombre()+"-"+columnName); } @Override public void paginadorEventOcurrido(PaginadorEvent paginadorEvent) { actualizarTabla(); } public void seleccionarProducto(){ this.producto=tmpProductos.productos.get(jtTabla.getSelec tedRow()); if(producto!=null){ jtfProductoCodigo.setText(producto.getCodigo().toString() ); jtfProductoNombre.setText(producto.getNombre()); jchbProductoDisponible.setSelected(producto.getDisponible ()); } if(this.producto!=null){ jbNuevo.setVisible(true); jbNuevo.setActionCommand(NUEVO);; jbAgregarModificar.setText("Modificar"); jbAgregarModificar.setActionCommand(MODIFICAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(ELIMINAR); }else{
nuevoProducto(); } } public void nuevoProducto(){ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jbNuevo.setVisible(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Limpiar"); jbEliminar.setActionCommand(App.NUEVO); } public void addProducto(){ producto = new Producto(); Integer codigo=null; if(jtfProductoCodigo.getText()!=null && !jtfProductoCodigo.getText().equals("") && !jtfProductoCodigo.getText().contains(" ")){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected( )); try{ tmpProductos.agregarProducto(producto); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } /*limpia el formulario*/ producto=new Producto(); jtfProductoCodigo.setText(""); jtfProductoNombre.setText(""); jchbProductoDisponible.setSelected(false); jbAgregarModificar.setText("Agregar"); jbAgregarModificar.setActionCommand(App.AGREGAR); jbEliminar.setText("Eliminar"); jbEliminar.setActionCommand(App.ELIMINAR); cPaginadorSuperior.inicio(); } public void modificarProducto(){
if(producto!=null){ Integer codigo=null; if(jtfProductoCodigo.getText()!=null){ codigo=Integer.parseInt(jtfProductoCodigo.getText()); } producto.setCodigo(codigo); producto.setNombre(jtfProductoNombre.getText()); producto.setDisponible(jchbProductoDisponible.isSelected( )); } try{ tmpProductos.modificarProducto(jtTabla.getSelectedRow(), producto); cPaginadorSuperior.inicio(); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } } public void eliminarProducto(){ try{ tmpProductos.eliminarProducto(jtTabla.getSelectedRow()); }catch(DAOException e){ JOptionPane.showMessageDialog(this, e.mensaje); }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()); } this.jtTabla.repaint(); cPaginadorSuperior.inicio(); } public void actualizarTabla(){ jsp.remove(jtTabla); jtTabla.setModel(tmpProductos); jtTabla.repaint(); jsp.setViewportView(jtTabla); jsp.revalidate(); } public static void main(String [] args){ javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { App app = new App(); app.setVisible(true); }
}); } }
ProductosTableModel.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.gui.tablemodel; import import import import import import import import import java.util.ArrayList; java.util.List; javax.swing.event.TableModelListener; javax.swing.table.TableModel; ar.com.hdcm.producto.dao.ProductoDAO; ar.com.hdcm.producto.dao.exception.DAOException; ar.com.hdcm.producto.jpadao.util.DAOFactory; ar.com.hdcm.producto.modelo.Producto; ar.com.hdcm.swing.AbstractPaginable;
public class ProductosTableModelPaginado extends AbstractPaginable implements TableModel{ public List<Producto> productos = new ArrayList<Producto>(); public List<String> nombreColumnas = new ArrayList<String>(); public List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>(); public ProductoDAO productoDao = DAOFactory.getDAOFactory(DAOFactory.JPA).getProductoDAO(); public ProductosTableModelPaginado(){ nombreColumnas.add("Cdigo"); nombreColumnas.add("Nombre"); nombreColumnas.add("Disponible"); } @Override public Class<?> getColumnClass(int arg0) { return getValueAt(0, arg0).getClass(); } @Override
public int getColumnCount() { if(nombreColumnas!=null){ return nombreColumnas.size(); } return 0; } @Override public String getColumnName(int arg0) { if(nombreColumnas!=null && arg0>=0 && nombreColumnas.size()>arg0){ return nombreColumnas.get(arg0); } return null; } @Override public int getRowCount() { if(productos!=null){ return productos.size(); } return 0; } @Override public Object getValueAt(int arg0, int arg1) { if(productos!=null && arg0>=0 && arg1>=0 && productos.size()>arg0){ Producto producto=productos.get(arg0); switch(arg1){ case 0: return producto.getCodigo(); case 1: return producto.getNombre(); case 2: return producto.getDisponible(); } } return null; } @Override public void setValueAt(Object arg0, int arg1, int arg2) { if(productos!=null && arg1>=0 && arg2>=0 && productos.size()>arg1){ Producto producto=productos.get(arg1); switch(arg2){ case 0: Integer codigoNuevo=null; if(arg0!=null){ codigoNuevo=(Integer)arg0; } producto.setCodigo(codigoNuevo); break; case 1: String nombreNuevo=null;
if(arg0!=null){ nombreNuevo=(String)arg0; } producto.setNombre(nombreNuevo); break; case 2: Boolean disponible=false; if(arg0!=null){ disponible=(Boolean)arg0; } producto.setDisponible(disponible); break; } } } @Override public boolean isCellEditable(int arg0, int arg1) { return false; } @Override public void removeTableModelListener(TableModelListener arg0) { tableModelListeners.add(arg0); } @Override public void addTableModelListener(TableModelListener arg0) { tableModelListeners.remove(arg0); } @Override public void actualizar(int indice,int cantidadRenglones) throws DAOException{ productos=productoDao.findAll(indice, cantidadRenglones); } @Override public int getCantidadRenglones() { return productos.size(); } public void agregarProducto(Producto producto) throws DAOException{ producto.setId(productoDao.create(producto)); } public void modificarProducto(Integer indice, Producto productoModificado) throws DAOException{ productoModificado.setId(productoDao.update(productoModif
icado)); Producto productoNoModificado=productos.get(indice); if(productoModificado!=null && productoModificado.getId()!=null){ productoNoModificado.setId(productoModificado.getId()); productoNoModificado.setCodigo(productoModificado.getCodi go()); productoNoModificado.setDisponible(productoModificado.get Disponible()); } } public void eliminarProducto(int indice) throws DAOException{ Producto producto = productos.get(indice); productoDao.remove(producto.getId()); } }
package ar.com.hdcm.producto.modelo; import import import import import import import import javax.persistence.Column; javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.Id; javax.persistence.NamedQueries; javax.persistence.NamedQuery; javax.persistence.SequenceGenerator; javax.persistence.Table;
@Entity @Table(name="productos") @NamedQueries({ @NamedQuery(name="Producto.getAll" , query= " select producto from Producto producto ")}) @SequenceGenerator(name="sec", sequenceName="productos_id_seq") public class Producto {
public Producto(){ } @Id @GeneratedValue(generator="sec") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } @Column(length=52,nullable=false) public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public Boolean getDisponible() { if(disponible!=null) return disponible; else return false; } public void setDisponible(Boolean disponible) { this.disponible = disponible; } }
DAOFactory.java
package ar.com.hdcm.producto.jpadao.util; import ar.com.hdcm.producto.dao.ProductoDAO; public abstract class DAOFactory { //lista de daos soportados por el factory public static final int JPA = 1; //lista de metodos para cada dao que puede ser creado. //los factories deberan implementar estos metodos. public abstract ProductoDAO getProductoDAO();
public static DAOFactory getDAOFactory(int witchFactory) { try { switch(witchFactory){ case JPA: return new JpaDAOFactory(); default: return null; } } catch (Exception ex) { throw new RuntimeException("Couldn't create DAOFactory: "); } } }
jpaProductoDAO.java
/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */
package ar.com.hdcm.producto.jpadao; import java.util.ArrayList; import java.util.List; import import import import import import import import import javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.EntityTransaction; javax.persistence.Persistence; javax.persistence.Query; javax.persistence.TypedQuery; javax.persistence.criteria.CriteriaBuilder; javax.persistence.criteria.CriteriaQuery; javax.persistence.criteria.Root;
import ar.com.hdcm.producto.modelo.Producto; import ar.com.hdcm.producto.dao.ProductoDAO; import ar.com.hdcm.producto.jpadao.exception.JpaProductoDAOException; public class JpaProductoDAO implements ProductoDAO { public JpaProductoDAO(){ super(); }
@Override public Integer create(Producto producto) throws JpaProductoDAOException{ if(producto!=null){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); EntityTransaction tx=null; try { tx = em.getTransaction(); tx.begin(); em.persist(producto); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new JpaProductoDAOException(JpaProductoDAOException.CREATE,e); } finally { em.close(); emf.close(); } return producto.getId(); } return null; } @Override public Integer update(Producto producto) throws JpaProductoDAOException{ EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); EntityTransaction tx=null; try { tx = em.getTransaction(); tx.begin(); producto=(Producto)em.merge(producto); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new JpaProductoDAOException(JpaProductoDAOException.UPDATE,e); } finally { em.close(); emf.close(); } return producto.getId(); } @Override public Integer remove(Integer id) throws JpaProductoDAOException{ EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa");
EntityManager em = emf.createEntityManager(); EntityTransaction tx=null; Integer idRemove=null; try { tx = em.getTransaction(); tx.begin(); Producto producto = (Producto)em.find(Producto.class, id); idRemove=producto.getId(); em.remove(producto); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new JpaProductoDAOException(JpaProductoDAOException.REMOVE,e); } finally { em.close(); emf.close(); } return idRemove; } @Override public Producto find(Integer id) throws JpaProductoDAOException{ Producto producto=null; EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); EntityTransaction tx=null; try { tx = em.getTransaction(); tx.begin(); producto = (Producto)em.find(Producto.class, id); tx.commit(); }catch (Exception e) { if(tx!=null) tx.rollback(); throw new JpaProductoDAOException(JpaProductoDAOException.FIND,e); } finally { em.close(); emf.close(); } return producto; } @SuppressWarnings("unchecked") @Override public List<Producto> findAll() throws JpaProductoDAOException{ List<Producto> productos = new ArrayList<Producto>();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); try { Query query=em.createNamedQuery("Producto.getAll"); productos= query.getResultList(); }catch (Exception e) { throw new JpaProductoDAOException(JpaProductoDAOException.FINDALL,e); } finally { em.close(); emf.close(); } return productos; } @SuppressWarnings("unchecked") @Override public List<Producto> findAll(int indice,int cantidadRenglones) throws JpaProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); try { Query query=em.createNamedQuery("Producto.getAll"); query.setMaxResults(cantidadRenglones); query.setFirstResult(indice); productos=query.getResultList(); }catch (Exception e) { throw new JpaProductoDAOException(JpaProductoDAOException.FINDALL_PAGINADO, e); } finally { em.close(); emf.close(); } if(productos==null) productos = new ArrayList<Producto>(); return productos; } @SuppressWarnings("unchecked") public List<Producto> findAll(int indice,int cantidadRenglones,List filtro) throws JpaProductoDAOException{ List<Producto> productos = new ArrayList<Producto>(); //http://openjpa.apache.org/builds/latest/docs/manual/jpa _overview_criteria.html
EntityManagerFactory emf = Persistence.createEntityManagerFactory("productojpa"); EntityManager em = emf.createEntityManager(); try { //http://www.altuure.com/2010/09/23/jpacriteria-api-by-samples-part-i/ CriteriaBuilder queryBuilder = em.getCriteriaBuilder(); CriteriaQuery criteriaQuery= queryBuilder.createQuery(); Root<Producto> from = criteriaQuery.from(Producto.class); CriteriaQuery<Producto> select = criteriaQuery.select(from); TypedQuery<Producto> typedQuery = em.createQuery(select); typedQuery.setMaxResults(cantidadRenglones); typedQuery.setFirstResult(indice); productos = typedQuery.getResultList(); }catch (Exception e) { throw new JpaProductoDAOException(JpaProductoDAOException.FINDALL_PAGINADO, e); } finally { em.close(); emf.close(); } if(productos==null) productos = new ArrayList<Producto>(); return productos; } }
JpaProductoDAOException.java
package ar.com.hdcm.producto.jpadao.exception; import ar.com.hdcm.producto.dao.exception.DAOException; public class JpaProductoDAOException extends DAOException { private static final long serialVersionUID = 1L; public JpaProductoDAOException(String tipo, Exception e) { super(tipo, "",e); System.out.println("-"+tipo); System.out.println("-"+sentenciaSQL); e.printStackTrace();
System.out.println("-"); } }
El proyecto necesita un jar, que fue construido desde el "ejemplo 1 - Jdbc": ar.com.hdcm.swing.jar
3. Referencias y Enlaces:
1. Java Notes: Table of Contents 1. FlowLayout 2. Patrones - jee 1. aplicacion de patrones j2ee en un caso de estudio 2. dao 3. Scrollable ResultSet JDBC Postgresql 4. Resultset ferm 5. How to Use Tables 6. JAVA: Practicando con CardLayout 7. How to Use Borders 8. Aprediendo con JCheckBox y JRadioButton 9. Eventos 1. Creating a Custom Event 2. Implementing a Simple Event Notifier 3. How do I create my own events to pass between objects? 10. Showmessage 1. Alert Dialogs (JOptionPane) 2. Show Dialog Box in Java - Swing Dialogs 11. Showmessage 1. Sessions and Transactions