0% encontró este documento útil (0 votos)
2K vistas

Codigo de Ejemplos Java Eclipse

El documento presenta 5 ejemplos de aplicaciones Java con interfaces gráficas creadas con Swing. El primer ejemplo muestra un simple programa "Hola Mundo". El segundo ejemplo también es un programa "Hola Mundo" pero con mejoras gráficas. El tercer ejemplo implementa un sistema de administración de productos (ABM) con tablas y formularios. Los siguientes ejemplos continúan agregando funcionalidad a sistemas ABM. Finalmente, se enlazan temas relacionados como bases de datos, Hibernate y JPA.

Cargado por

Briseyda Jaimes
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2K vistas

Codigo de Ejemplos Java Eclipse

El documento presenta 5 ejemplos de aplicaciones Java con interfaces gráficas creadas con Swing. El primer ejemplo muestra un simple programa "Hola Mundo". El segundo ejemplo también es un programa "Hola Mundo" pero con mejoras gráficas. El tercer ejemplo implementa un sistema de administración de productos (ABM) con tablas y formularios. Los siguientes ejemplos continúan agregando funcionalidad a sistemas ABM. Finalmente, se enlazan temas relacionados como bases de datos, Hibernate y JPA.

Cargado por

Briseyda Jaimes
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 91

http://hdcm.sytes.net/documentos/programacion/java/temas/java_ejemplos.

html ejemplos de java en 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.

2. Interfaces con Swing


1. Ejemplo 1: Hola Mundo Ficheros fuentes:

App.java

Descargar proyecto: EjemploSwing1.tar.gz

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); } }

2. Ejemplo 2: Hola Mundo Ficheros fuentes:

App.java

Descargar proyecto: EjemploSwing2.tar.gz


package ar.com.hdcm.ejemploswing2.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 import javax.swing.JButton; javax.swing.JFrame; javax.swing.JLabel; javax.swing.JPanel; javax.swing.JScrollPane; 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 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);

} }

*****************************************************************************

3. Ejemplo 3: ABM Ficheros fuentes:

App.java Producto.java ProductosTableModel.java

Tarballs del proyecto en Eclipse: Proyecto Eclipse: EjemploSwing3.tar.gz

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

Ficheros fuentes: App.java BarraBotonesActionListener.java Producto.java

ProductosTableModel.java

Tarballs del proyecto en Eclipse: EjemploSwing4.tar.gz

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 import import import import import import import import

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.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;

import import import import import import

ar.com.hdcm.producto.dao.exception.DAOException; ar.com.hdcm.producto.gui.tablemodel.ProductosTableModelPaginado; ar.com.hdcm.producto.modelo.Producto; ar.com.hdcm.swing.Paginador; ar.com.hdcm.swing.event.PaginadorEvent; 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 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()); } }

Las clases relacionadas con el paginado: Paginador.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.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(">");

private Paginable paginable; public Paginador(Paginable paginable){ this.setLayout(new FlowLayout()); this.add(jbInicio);

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); } }

Las clases relacionadas con el modelo y la persistencia: Producto.java


/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */

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: * *

fernando rafael filipuzzi

* @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

+" fr private static final String FIND_ALL_SQL_PAGINADO = id,codigo,nombre,disponible "

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.

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 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 javax.swing.BorderFactory; import javax.swing.JButton;

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()); } }

Las clases relacionadas con el modelo y la persistencia: DAOFactory.java


package ar.com.hdcm.producto.hbdao.util; import ar.com.hdcm.producto.dao.ProductoDAO; public abstract class DAOFactory { //lista de daos soportados por el factory public static final int HIBERNATE = 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 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; } }

XML de Mapeo: hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernateconfiguration-3.0.dtd"> <hibernate-configuration> <session-factory > <property name="connection.driver_class">org.postgresql.Driver</property> <property

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 -

Jdbc": ar.com.hdcm.swing.jar ar.com.hdcm.producto.jar 3. Ejemplo 3 - JPA:

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;

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 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()); } }

Las clases relacionadas con el modelo y la persistencia: Producto.java


/* * * * * * * * * * * @autor: fernando rafael filipuzzi @e-mail: [email protected] @sitio web: http://hdcm.sytes.net http://hdcm.com.ar */

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 {

private private private private

Integer id; Integer codigo; String nombre; Boolean disponible=false;

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("-"); } }

XML de Mapeo: persistence.xml


<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistenc e http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="productojpa"> <properties> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" /> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/productos" /> <property name="hibernate.connection.username" value="productoadmin" /> <property name="hibernate.connection.password" value="productoadmin" /> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> <property name="hibernate.connection.pool_size" value="10" /> <property name="hibernate.connection.autoReconnect" value="true" /> <property name="hibernate.generate_statistics" value="false" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.use_sql_comments" value="false" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>

4. Tarballs del proyecto: EjemploJpa.tar.gz

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

También podría gustarte