Sei sulla pagina 1di 89

121

OBJETIVOS Construir aplicaciones utilizando la clase JTable y JTree Utilizar la clase JTable para la creacin de aplicaciones con Base de datos.

JTable
La clase JTable nos permite organizar una determinada informacin en un tabla. Esta clase tiene ms de 100 mtodos. La JTable controla cmo se presentan los datos, siendo el TableModel quien controla los datos en s mismos. Para crear una JTable habr pues que crear un TableModel antes, normalmente. Se puede implementar, para ello, el interfaz TableModel, pero es mucho ms simple heredar de la clase ayuda AbstractTableModel. 1. Clases e Interfaces Relacionados con las Tablas Clase/Interface Propsito

121

122

JTable JTableHeader

El componente que presenta la tabla al usuario. El componente que presenta los nombres de columnas al usuario. Por defecto, la tabla genera este componente automticamente. Respectivamente, el interface que un modelo de tabla debe implementar y la superclase usual para implementaciones de modelos de tabla. Respectivamente, el interface que un intrprete de celda debe implementar y la implementacin ms usual. Respectivamente, el interface que debe implementar un editor de celda, y la implementacin ms usual. Respectivamente, el interface que debe implementar un modelo de columna, y su implementacin usual. Normalmente no tenemos que tratar directamente con el modelo de columna a menos que necesitemos obtener el modelo de seleccin de columna u obtener un ndice de columna o un objeto. Controla todos los atributos de una columna de la tabla, incluyendo, redimensionado, anchuras mnima, mxima, preferida y actual; y editor/intrprete opcional especfico de la columna. Un modelo de tabla basado en Vector utilizado por JTable cuando construimos una tabla sin especificar modelo de datos ni datos.

TableModel, AbstractTableModel TableCellRenderer, DefaultTableCellRenderer TableCellEditor, DefaultCellEditor

TableColumnModel, DefaultTableColumnModel

TableColumn

DefaultTableModel

Crear y Configurar una Tabla Mtodo/Constructor de JTable JTable(TableModel) JTable(TableModel, TableColumnModel) JTable(TableModel, TableColumnModel, ListSelectionModel) JTable() JTable(int, int) Propsito Crea una tabla. El argumento opcional TableModel especifica el modelo que proporciona los datos de la tabla. Los argumentos opcionales TableColumnModel y ListSelectionModel permiten especificar el modelo de columna y el modelo de seleccin.

122

123

JTable(Object[][], Object[]) JTable(Vector, Vector)

Como una alternativa para especificar un modelo de tabla, podemos suministrar datos y nombres de columnas utilizando un array o un Vector. Otra opcin es no especificar datos, opcionalmente especificar el nmero de filas y columnas (ambos enteros) que hayan en la tabla.

Selecciona el tamao de la void parte visible de la tabla setPreferredScrollableViewportSize(Dimension) cuando se est viendo dentro de un ScrollPane. JTableHeader getTableHeader(Dimension) Obtiene el componente que muestra los nombres de columnas.

Manipular Columnas Mtodo TableColumnModel getColumnModel() (en JTable) TableColumn getColumn(int) Enumeration getColumns() (en TableColumnModel) void setMinWidth(int) void setPreferredWidth(int) void setMaxWidth(int) (en TableColumn) int getMinWidth(int) int getPreferredWidth() Obtiene la anchura mnima, preferida, mxima o actual de la columna. Seleciona la anchura mnima, preferida o mxima de la columna. Obtiene uno o todos los objetos TableColumn de la tabla. Propsito Obtiene el modelo de columna de la tabla.

123

124

int getMaxWidth() int getWidth() (en TableColumn) Usar Editores e Intrpretes Mtodos void setDefaultRenderer(Class, TableCellRenderer) void setDefaultEditor(Class, TableCellEditor) (en JTable) void setCellRenderer(TableCellRenderer) void setCellEditor(TableCellEditor) (en TableColumn) TableCellRenderer getHeaderRenderer() (en TableColumn) Implementar Seleccin Mtodo de JTable Propsito Selecciona los intervalos de seleccin permitidos en la tabla. Los valores vlidos estn definidos en ListSelectionModel como SINGLE_SELECTION, SINGLE_INTERVAL_SELECTION, y MULTIPLE_INTERVAL_SELECTIO N (por defecto). Obtiene el intrprete de cabecera para esta columna, que podemos personalizar. Selecciona el intrprete o editor usado para todas las celdas de esta columna. Propsito Selecciona el intrprete o editor usado, por defecto, para todas las celdas en todas las columnas que devuelvan el tipo de objetos especificado.

void setSelectionMode(int)

void setSelectionModel(ListSelectionModel Selecciona u obtiene el modelo ) usado para controlar las selecciones de filas. ListSelectionModel getSelectionModel()

124

125

void setRowSelectionAllowed(boolean)

Selecciona la orientacin de seleccin de la tabla. El argumento booleano especifica si est permitido void el tipo de seleccin particular. Por setColumnSelectionAllowed(boolean) defecto, las seleccin de filas est permitida, y la de columna y celda void no. setCellSelectionEnabled(boolean) 2. Utilizando TableModel Como se ha visto, toda tabla obtiene sus datos desde un objeto que implemente el interface TableModel. El constructor de JTable usado por SimpleTableDemo crea su modelo de tabla con este cdigo.
new AbstractTableModel() { public String getColumnName(int col) { return columnNames[col].toString(); } public int getRowCount() { return rowData.length; } public int getColumnCount() { return columnNames.length; } public Object getValueAt(int row, int col) { return rowData[row][col]; } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { rowData[row][col] = value; fireTableCellUpdated(row, col); } }

Ejemplo:

Se puede movilizar las columnas y seleccinar las filas que se desee.

125

126

import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; import com.sun.java.swing.table.*; import com.sun.java.swing.event.*; // El Modelo de la Tabla es el que controla todos los // datos que se colocan en ella class ModeloDatos extends AbstractTableModel { Object datos[][] = { {"uno","dos","tres","cuatro"}, {"cinco","seis","siete","ocho"}, {"nueve","diez","once","doce"}, }; // Esta clase imprime los datos en la consola cada vez // que se produce un cambio en cualquiera de las // casillas de la tabla class TablaListener implements TableModelListener { public void tableChanged( TableModelEvent evt ) { for( int i=0; i < datos.length; i++ ) { for( int j=0; j < datos[0].length; j++ ) System.out.print( datos[i][j] + " " ); System.out.println(); } } } // Constructor ModeloDatos() { addTableModelListener( new TablaListener() ); } // Devuelve el nmero de columnas de la tabla public int getColumnCount() { return( datos[0].length ); } // Devuelve el nmero de filas de la tabla 126

127

public int getRowCount() { return( datos.length ); } // Devuelve el valor de una determinada casilla de la tabla // identificada mediante fila y columna public Object getValueAt( int fila,int col ) { return( datos[fila][col] ); } // Cambia el valor que contiene una determinada casilla de // la tabla public void setValueAt( Object valor,int fila,int col ) { datos[fila][col] = valor; // Indica que se ha cambiado fireTableDataChanged(); } // Indica si la casilla identificada por fila y columna es // editable public boolean isCellEditable( int fila,int col ) { return( true ); } } public class ejercicio extends JPanel { public ejercicio () { setLayout( new BorderLayout() ); JTable tabla = new JTable( new ModeloDatos() ); // La tabla se aade a un ScrollPane para que sea ste el // que controle automticamente en tamao de la tabla, // presentando una barra de desplazamiento cuando sea // necesario JScrollPane panel = new JScrollPane( tabla ); add( panel,BorderLayout.CENTER ); } public static void main(String args[]) { JFrame frame = new JFrame( "Tutorial de Java, Swing" ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent evt ) { System.exit( 0 ); } } ); frame.getContentPane().add( new java1416(),BorderLayout.CENTER );

127

128

frame.setSize( 200,200 ); frame.setVisible( true ); } }

ACTIVIDAD
Cree la siguiente aplicacin el cual se pueda agregar registro a una tabla.

public class Panel extends JPanel implements MouseListener{ // --- Creando model y tabla ModeloTabla mt = new ModeloTabla(); JTable jt = new JTable(); // --- Creando componentes para el ingreso de datos JPanel panelInferior = new JPanel(); JLabel lblCodigo = new JLabel("Cdigo"); JLabel lblNombre = new JLabel("Nombre"); JLabel lblDireccion = new JLabel("Direccin"); 128

129

JLabel lblFoto = new JLabel("Foto"); JTextField txtCodigo = new JTextField(); JTextField txtNombre = new JTextField(); JTextField txtDireccion = new JTextField(); JTextField txtFoto = new JTextField(); JButton b1 = new JButton("Aadir"); JButton b2 = new JButton("Modificar"); // --ListaPersonas lpersonas = new ListaPersonas(); public Panel(){ jt.setModel(mt); setLayout(new GridLayout(2,1)); add(new JScrollPane(jt)); // --- panel para ingreso de datos panelInferior.setLayout(new GridLayout(5,2)); panelInferior.add(lblCodigo); panelInferior.add(txtCodigo); panelInferior.add(lblNombre); panelInferior.add(txtNombre); panelInferior.add(lblDireccion); panelInferior.add(txtDireccion); panelInferior.add(lblFoto); panelInferior.add(txtFoto); panelInferior.add(b1);

129

130

panelInferior.add(b2); add(panelInferior); b1.addMouseListener(this); b2.addMouseListener(this); jt.addMouseListener(this); // --- asociamos listener a la tabla } public void mouseClicked(MouseEvent arg0) { // --- Boton aadir Registro if (arg0.getSource().equals(b1)){ Persona p = lpersonas.buscar(txtCodigo.getText()); // --- Si no existe la persona if (p==null) { p = new Persona(); p.setCodigo(txtCodigo.getText()); p.setNombre(txtNombre.getText()); p.setDireccion(txtDireccion.getText()); p.setFoto(txtFoto.getText());

// --- agregamos a la lista lpersonas.adicionar(p); // --- recuperando data actual del model Vector dataActual = mt.data; Vector nuevaFila = new Vector(); nuevaFila.add( txtCodigo.getText());

130

131

nuevaFila.add( nuevaFila.add(

txtNombre.getText()); txtDireccion.getText());

// --- agregando nueva fila a data actual dataActual.add(nuevaFila); // --- retornando dataActual al model mt.setData(dataActual); mt.insertaData(p); } } // --- boton modificar if (arg0.getSource().equals(b2)){

Persona p = lpersonas.buscar(txtCodigo.getText()); if (p!=null) { p.setCodigo(txtCodigo.getText()); p.setNombre(txtNombre.getText()); p.setDireccion(txtDireccion.getText()); p.setFoto(txtFoto.getText()); // --- Obtenemos la fila seleccionada en el JTable int filSel = jt.getSelectedRow(); // --- Actualizando listaPersona lpersonas.insertar(p,filSel); lpersonas.remover(filSel+1); Vector dataActual = mt.data;

131

132

Vector filaModificada = new Vector(); filaModificada.add(txtCodigo.getText()); filaModificada.add(txtNombre.getText()); filaModificada.add(txtDireccion.getText()); dataActual.insertElementAt(filaModificada,filSel); dataActual.removeElementAt(filSel+1);

mt.setData(dataActual); } } // --- El JTable if (arg0.getSource().equals(jt)){

// --- Recuperamos el numero de la fila seleccionada int filSel = jt.getSelectedRow(); // --- recuperando el codigo String codigoSel = jt.getValueAt(filSel,0).toString(); Persona p = lpersonas.buscar(codigoSel); txtCodigo.setText(p.getCodigo()); txtNombre.setText(p.getNombre()); txtDireccion.setText(p.getDireccion()); txtFoto.setText(p.getFoto()); } }

132

133

public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { } } } public void mouseExited(MouseEvent arg0) {

133

134

OBJETIVOS Implementar un sistema o aplicacin grfica utilizando Swing. Presentar los entornos grficos del proyetco final.

1. Creando al clienteBean package Bean; public class ClienteBean { private Integer idcliente; private String nombre; private String apepaterno; private String apematerno; private String sexo; private Integer edad; private String numdocumento; private String telefono; private String email; private String Ruc; private String estado; private String direccion; public String getApematerno() { 134

135

return apematerno; } public void setApematerno(String apematerno) { this.apematerno = apematerno; } public String getApepaterno() { return apepaterno; } public void setApepaterno(String apepaterno) { this.apepaterno = apepaterno; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public Integer getEdad() { return edad; } public void setEdad(Integer edad) { this.edad = edad; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public Integer getIdcliente() { return idcliente; } public void setIdcliente(Integer idcliente) { this.idcliente = idcliente; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; }

135

136

public String getNumdocumento() { return numdocumento; } public void setNumdocumento(String numdocumento) { this.numdocumento = numdocumento; } public String getRuc() { return Ruc; } public void setRuc(String ruc) { Ruc = ruc; } public String getSexo() { return sexo; } public void setSexo(String sexo) { this.sexo = sexo; } public String getTelefono() { return telefono; } public void setTelefono(String telefono) { this.telefono = telefono; } } 2. Frame Cliente package presentacion; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.Dimension; import javax.swing.JToolBar; import java.awt.Rectangle; import javax.swing.BorderFactory; import javax.swing.border.TitledBorder; import javax.swing.table.DefaultTableModel; import java.awt.Font; import java.awt.Color; import javax.swing.JLabel; import java.util.List; import java.util.Vector; import javax.swing.JOptionPane;

136

137

import javax.swing.SwingConstants; import javax.swing.JTextField; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JButton; import javax.swing.ImageIcon; import javax.swing.JRadioButton; import javax.swing.ListSelectionModel; import Bean.ClienteBean; import Logic.GestorCliente; import java.awt.Point; public class FrmBuscarCliente extends JFrame { private static final long serialVersionUID = 1L; private GestorCliente g_cliente=null; private FrmProforma ventProforma=null; private FrmVentaPaquete ventMantenerPaquete=null; List clientes=null; private int modo; private JPanel jContentPane = null; private JToolBar tlbBuscarCliente = null; private DefaultTableModel Modelo=null; private Vector <Object>Detalle=null; private Vector <Object>Encabezado=null; private JButton btnLimpiar = null; private JButton btnBuscar1 = null; private JButton btnCancelar = null; private JButton btnAceptar = null; private JPanel pnlFiltros = null; private JLabel lblCodigo = null; private JTextField tbxCodigo = null; private JLabel lblDni = null; private JTextField tbxDni = null; private JLabel lblApellido = null; private JTextField tbxApellido = null; private JRadioButton rbtnNatural = null; private JLabel lblNatural = null; private JRadioButton rbtnJuridico = null; private JLabel lblJuridico = null; private JPanel pnlClientes = null; private JScrollPane scrpMantCliente = null; private JTable tblCliente = null;

137

138

private JLabel lbl_total = null; private JLabel lblRegistros1 = null; public FrmBuscarCliente(FrmProforma vent, FrmVentaPaquete ventMantener) { super(); Detalle=new Vector <Object>(); Encabezado=new Vector<Object>(); Encabezado.add("Cdigo"); Encabezado.add("Nombre"); Encabezado.add("Ap. Paterno"); Encabezado.add("D.N.I"); Modelo=new DefaultTableModel(Detalle,Encabezado){ private static final long serialVersionUID = 1L; public boolean isCellEditable (int rowIndex, int columnIndex){ return false; } };; this.ventProforma=vent; this.ventMantenerPaquete=ventMantener; g_cliente=new GestorCliente(); initialize(); this.rbtnNatural.setSelected(true); this.setResizable(false); } private void initialize() { this.setSize(459, 487); this.setContentPane(getJContentPane()); this.setTitle("JFrame"); } private JPanel getJContentPane() { if (jContentPane == null) { lblRegistros1 = new JLabel(); lblRegistros1.setBounds(new Rectangle(29, 408, 141, 27)); lblRegistros1.setText("Registros encontrados:"); lbl_total = new JLabel(); lbl_total.setText(""); lbl_total.setSize(new Dimension(67, 27)); lbl_total.setLocation(new Point(185, 411)); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getTlbBuscarCliente(), null);

138

139

jContentPane.add(getPnlFiltros(), null); jContentPane.add(getPnlClientes(), null); jContentPane.add(lbl_total, null); jContentPane.add(lblRegistros1, null); } return jContentPane; }

private JToolBar getTlbBuscarCliente() { if (tlbBuscarCliente == null) { tlbBuscarCliente = new JToolBar(); tlbBuscarCliente.setBounds(new Rectangle(0, 0, 451, 44)); tlbBuscarCliente.add(getBtnLimpiar()); tlbBuscarCliente.add(getBtnBuscar1()); tlbBuscarCliente.add(getBtnAceptar()); tlbBuscarCliente.add(getBtnCancelar()); } return tlbBuscarCliente; } public void limpiar(){ this.tbxApellido.setText(""); this.tbxCodigo.setText(""); this.tbxDni.setText(""); Detalle.clear(); Modelo.fireTableDataChanged(); this.lbl_total.setText(""); } private JButton getBtnLimpiar() { if (btnLimpiar == null) { btnLimpiar = new JButton(); btnLimpiar.setToolTipText("Limpiar"); btnLimpiar.setIcon(new ImageIcon(getClass().getResource("/Iconos/limpiar.png"))); btnLimpiar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() limpiar(); } }); }

139

140

return btnLimpiar; } public void carga_en_table(List clientes){ Integer total=clientes.size(); lbl_total.setText(total.toString()); Detalle.clear(); if (clientes.size()>0) { Integer ind=0; ClienteBean cliente=new ClienteBean(); Vector <Object>Fila; while(ind<clientes.size()) { cliente=(ClienteBean)clientes.get(ind); Fila=new Vector<Object>(); //JOptionPane.showMessageDialog(this,usuario.getApmaterno(), "Registrar Usuario",1); if(rbtnNatural.isSelected()) {Fila.add(cliente.getIdcliente()); Fila.add(cliente.getNombre()); Fila.add(cliente.getApepaterno()); Fila.add(cliente.getNumdocumento()); } else {Fila.add(cliente.getIdcliente()); Fila.add(cliente.getNombre()); Fila.add(cliente.getRuc()); Fila.add(cliente.getTelefono()); } Detalle.add(Fila); ind++; } Modelo.fireTableDataChanged(); } else { Detalle.clear(); Modelo.fireTableDataChanged(); } } public void busca_clientes(){ ClienteBean cliente=new ClienteBean();

if (!tbxCodigo.getText().equals("")) cliente.setIdcliente(Integer.parseInt(tbxCodigo.getText()));

140

141

else cliente.setIdcliente(0); if(this.rbtnNatural.isSelected()) {cliente.setApepaterno(tbxApellido.getText()); cliente.setNumdocumento(tbxDni.getText()); clientes=this.g_cliente.getClientesxFiltros(cliente); } else {cliente.setNombre(this.tbxApellido.getText()); cliente.setRuc(this.tbxDni.getText()); clientes=this.g_cliente.getClientesxFiltrosJ(cliente); } carga_en_table(clientes); } private JButton getBtnBuscar1() { if (btnBuscar1 == null) { btnBuscar1 = new JButton(); btnBuscar1.setToolTipText("Buscar"); btnBuscar1.setIcon(new ImageIcon(getClass().getResource("/Iconos/Buscar.png"))); btnBuscar1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("click en buscar cliente"); // TODO Auto-generated Event stub actionPerformed() busca_clientes(); } }); } return btnBuscar1; }

private JButton getBtnCancelar() { if (btnCancelar == null) { btnCancelar = new JButton(); btnCancelar.setToolTipText("Cancelar"); btnCancelar.setIcon(new ImageIcon(getClass(). getResource("/Iconos/salir.gif"))); btnCancelar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { FrmBuscarCliente.this.dispose();

141

142

} }); } return btnCancelar; } public void carga_datos_linea(){ if (tblCliente.getSelectedRow()==-1) JOptionPane.showMessageDialog(this, "Debe seleccionar una fila.", "Bsqueda Cliente",JOptionPane.ERROR_MESSAGE); else{ ClienteBean c=new ClienteBean(); c=(ClienteBean)clientes.get(tblCliente.getSelectedRow()); if(modo==0) this.ventProforma.setCliente(c); else this.ventMantenerPaquete.setCliente(c); this.dispose(); } } private JButton getBtnAceptar() { if (btnAceptar == null) { btnAceptar = new JButton(); btnAceptar.setIcon(new ImageIcon(getClass().getResource("/Iconos/button_ok.png"))); btnAceptar.setToolTipText("Aceptar"); btnAceptar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { //FrmBuscarCliente.this.dispose(); if(Detalle.size()>0) carga_datos_linea(); else JOptionPane.showMessageDialog(FrmBuscarCliente.this, "Deber seleccionar un cliente.", "Bsqueda Cliente",JOptionPane.ERROR_MESSAGE); } }); } return btnAceptar; }

142

143

private JPanel getPnlFiltros() { if (pnlFiltros == null) { lblJuridico = new JLabel(); lblJuridico.setBounds(new Rectangle(40, 60, 54, 20)); lblJuridico.setText("Jurdico"); lblNatural = new JLabel(); lblNatural.setBounds(new Rectangle(40, 30, 55, 20)); lblNatural.setText("Natural"); lblApellido = new JLabel(); lblApellido.setBounds(new Rectangle(122, 56, 79, 18)); lblApellido.setHorizontalTextPosition(SwingCon stants.RIGHT); lblApellido.setText("Ap. Paterno :"); lblApellido.setHorizontalAlignment(SwingConstants.RIGHT); lblDni = new JLabel(); lblDni.setBounds(new Rectangle(156, 86, 45, 18)); lblDni.setHorizontalTextPosition(SwingConstants.RIGHT); lblDni.setText("D.N.I :"); lblDni.setHorizontalAlignment(SwingConstants.RIGHT); lblCodigo = new JLabel(); lblCodigo.setBounds(new Rectangle(142, 28, 59, 18)); lblCodigo.setHorizontalTextPosition(SwingConstants.RIGHT); lblCodigo.setText("Cdigo :"); lblCodigo.setHorizontalAlignment(SwingConstants.RIGHT); pnlFiltros = new JPanel(); pnlFiltros.setLayout(null); pnlFiltros.setBounds(new Rectangle(22, 62, 410, 134)); pnlFiltros.setBorder(BorderFactory.createTitledBorder(null, "Filtros", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51))); pnlFiltros.add(lblCodigo, null); pnlFiltros.add(getTbxCodigo(), null); pnlFiltros.add(lblDni, null); pnlFiltros.add(getTbxDni(), null); pnlFiltros.add(lblApellido, null); pnlFiltros.add(getTbxApellido(), null); pnlFiltros.add(getRbtnNatural(), null); pnlFiltros.add(lblNatural, null); pnlFiltros.add(getRbtnJuridico(), null); pnlFiltros.add(lblJuridico, null); } return pnlFiltros;

143

144

} private JTextField getTbxCodigo() { if (tbxCodigo == null) { tbxCodigo = new JTextField(); tbxCodigo.setBounds(new Rectangle(211, 26, 142, 20)); } return tbxCodigo; }

private JTextField getTbxDni() { if (tbxDni == null) { tbxDni = new JTextField(); tbxDni.setBounds(new Rectangle(211, 87, 142, 20)); } return tbxDni; }

private JTextField getTbxApellido() { if (tbxApellido == null) { tbxApellido = new JTextField(); tbxApellido.setBounds(new Rectangle(211, 54, 142, 20)); } return tbxApellido; } private JRadioButton getRbtnNatural() { if (rbtnNatural == null) { rbtnNatural = new JRadioButton(); rbtnNatural.setBounds(new Rectangle(15, 29, 25, 20)); rbtnNatural.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { cambia_check(0); } }); } return rbtnNatural; } private JRadioButton getRbtnJuridico() { if (rbtnJuridico == null) {

144

145

rbtnJuridico = new JRadioButton(); rbtnJuridico.setBounds(new Rectangle(15, 59, 25, 20)); rbtnJuridico.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { cambia_check(1); } }); } return rbtnJuridico; } private JPanel getPnlClientes() { if (pnlClientes == null) { pnlClientes = new JPanel(); pnlClientes.setLayout(null); pnlClientes.setBounds(new Rectangle(26, 209, 404, 182)); pnlClientes.setBorder(BorderFactory.createTitledBorder(null, "Clientes", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51))); pnlClientes.add(getScrpMantCliente(), null); } return pnlClientes; } private JScrollPane getScrpMantCliente() { if (scrpMantCliente == null) { scrpMantCliente = new JScrollPane(); scrpMantCliente.setBounds(new Rectangle(15, 29, 360, 125)); scrpMantCliente.setViewportView(getTblCliente ()); } return scrpMantCliente; } public void cambia_check(Integer modo){ //Si modo=0 entonces es natural //Sino es jurdico if(modo==0) {this.rbtnNatural.setSelected(true); this.rbtnJuridico.setSelected(false);

145

146

this.lblApellido.setText("Ap.Paterno :"); this.lblDni.setText("D.N.I :"); Encabezado.removeAllElements(); Encabezado.add("Cdigo"); Encabezado.add("Nombre"); Encabezado.add("Ap. Paterno"); Encabezado.add("Num. Documento"); } else {this.rbtnNatural.setSelected(false); this.rbtnJuridico.setSelected(true); this.lblApellido.setText("Empresa :"); this.lblDni.setText("R.U.C :"); Encabezado.removeAllElements(); Encabezado.add("Cdigo"); Encabezado.add("Empresa"); Encabezado.add("RUC"); Encabezado.add("Telfono"); } Detalle.removeAllElements(); Modelo.fireTableDataChanged(); Modelo.fireTableStructureChanged(); this.lbl_total.setText(""); } private JTable getTblCliente() { if (tblCliente == null) { tblCliente = new JTable(this.Modelo); tblCliente.setSelectionMode(ListSelectionModel.SINGLE_SELECTIO N); tblCliente.getTableHeader().setReorderingAllowed(false); tblCliente.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { if (e.getClickCount()==2){ carga_datos_linea(); } } }); }

146

147

return tblCliente; } public void setModo(int modo){ this.modo=modo; }

3. Mantenimientos de clientes package presentacion; import java.awt.Color; import java.awt.Font; import java.awt.Rectangle; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.ListSelectionModel; import javax.swing.border.TitledBorder; import java.awt.Dimension; import javax.swing.border.BevelBorder; import javax.swing.table.DefaultTableModel; import java.awt.event.KeyEvent; import java.awt.Toolkit; import java.util.List; import java.util.Vector; import javax.swing.JScrollPane; import javax.swing.SwingConstants; import Bean.ClienteBean; import Logic.GestorCliente;

147

148

import javax.swing.JRadioButton; public class FrmMantenimientoCliente extends JFrame { private static final long serialVersionUID = 1L; private GestorCliente g_cliente; private JPanel jContentPane = null; private JPanel pnlFiltros = null; private JLabel lblCodigo = null; private JTextField tbxCodigo = null; private JLabel lblDni = null; private JTextField tbxDni = null; private JLabel lblApellido = null; private JTextField tbxApellido = null; private JPanel pnlClientes = null; private JLabel lblRegistros = null; private FrmNuevoCliente NuevoCliente=null; private JScrollPane scrpMantCliente = null; private JTable tblCliente = null; private DefaultTableModel Modelo=null; private Vector Detalle=null; // @jve:decl-index=0: private Vector Encabezado=null; private JToolBar tlbCliente = null; private JButton btnLimpiar = null; private JButton btnRegistrar = null; private JButton btnModificar = null; private JButton btnEliminar = null; private JButton btnBuscar = null; private JButton btnSalir = null;

148

149

private JLabel lblTotal = null; private JRadioButton rbtnNatural = null; private JLabel lblNatural = null; private JRadioButton rbtnJuridico = null; private JLabel lblJuridico = null;

public FrmMantenimientoCliente() { super(); g_cliente=new GestorCliente(); Detalle=new Vector(); Encabezado=new Vector(); Modelo=new DefaultTableModel(Detalle,Encabezado){ private static final long serialVersionUID = 1L; public boolean isCellEditable (int rowIndex, int columnIndex){ return false; } };; initialize(); this.setResizable(false); } public void limpiar(){ this.tbxApellido.setText(""); this.tbxCodigo.setText(""); this.tbxDni.setText(""); Detalle.clear(); Modelo.fireTableDataChanged(); this.lblTotal.setText(""); } public void carga_en_table(List clientes){ Integer total=clientes.size(); lblTotal.setText(total.toString()); Detalle.clear(); if (clientes.size()>0) { Integer ind=0; ClienteBean cliente=new ClienteBean(); Vector Fila; while(ind<clientes.size()) { cliente=(ClienteBean)clientes.get(ind); Fila=new Vector();

149

150

//JOptionPane.showMessageDialog(this,usuario.getApmaterno(), "Registrar Usuario",1); if(rbtnNatural.isSelected()) {Fila.add(cliente.getIdcliente()); Fila.add(cliente.getNombre()); Fila.add(cliente.getApepaterno()); Fila.add(cliente.getNumdocumento()); } else {Fila.add(cliente.getIdcliente()); Fila.add(cliente.getNombre()); Fila.add(cliente.getRuc()); Fila.add(cliente.getTelefono()); } Detalle.add(Fila); ind++; } Modelo.fireTableDataChanged(); } else { Detalle.clear(); Modelo.fireTableDataChanged(); } } public void busca_clientes(){ ClienteBean cliente=new ClienteBean(); List clientes; if (!tbxCodigo.getText().equals("")) cliente.setIdcliente(Integer.parseInt(tbxCodigo.getText())); else cliente.setIdcliente(0); if(this.rbtnNatural.isSelected()) {cliente.setApepaterno(tbxApellido.getText()); cliente.setNumdocumento(tbxDni.getText()); clientes=this.g_cliente.getClientesxFiltros(cliente); } else {cliente.setNombre(this.tbxApellido.getText()); cliente.setRuc(this.tbxDni.getText()); clientes=this.g_cliente.getClientesxFiltrosJ(cliente); } carga_en_table(clientes); }

150

151

public void modifica(){ if (tblCliente.getSelectedRow()==-1) JOptionPane.showMessageDialog(this, "Debe seleccionar un cliente.", "Mantenimiento de Cliente",JOptionPane.ERROR_MESSAGE); else { if (NuevoCliente==null) NuevoCliente= new FrmNuevoCliente(); NuevoCliente.setTipo(1); NuevoCliente.setVentana_mantenimiento(this); NuevoCliente.limpiar(); NuevoCliente.setDatos(); Vector linea=(Vector)Detalle.get(tblCliente.getSelectedRow()); Integer codigo=(Integer)linea.get(0); if(!rbtnNatural.isSelected()){ NuevoCliente.setEsEmpresa(true); } else NuevoCliente.setEsEmpresa(false); NuevoCliente.carga_cliente(codigo); NuevoCliente.setVisible(true); } } private void elimina(){ if (tblCliente.getSelectedRow()==-1) JOptionPane.showMessageDialog(this, "Debe seleccionar un cliente.", "Mantenimiento de Cliente",JOptionPane.ERROR_MESSAGE); else { Vector linea=(Vector)Detalle.get(tblCliente.getSelectedRow()); Integer codigo=(Integer)linea.get(0); Integer decision=JOptionPane.showConfirmDialog(this,"Desea eliminar el cliente?", "Mantenimiento de Cliente", JOptionPane.YES_NO_OPTION); if (decision==0) { boolean exito=this.g_cliente.elimina(codigo); if (exito) {JOptionPane.showMessageDialog(this, "Se elimino con xito el cliente.", "Mantenimiento de Cliente",JOptionPane.INFORMATION_MESSAGE); this.busca_clientes();

151

152

} else JOptionPane.showMessageDialog(this, "No se pudo eliminar el cliente.", "Mantenimiento de Cliente",JOptionPane.ERROR_MESSAGE); } } } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(437, 480); this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().g etResource("/Iconos/Contacto.png"))); this.setContentPane(getJContentPane()); this.setTitle("Mantenimiento de Clientes"); } public void cambia_check(Integer modo){ //Si modo=0 entonces es natural //Sino es jurdico if(modo==0) {this.rbtnNatural.setSelected(true); this.rbtnJuridico.setSelected(false); this.lblApellido.setText("Ap.Paterno :"); this.lblDni.setText("D.N.I :"); Encabezado.removeAllElements(); Encabezado.add("Cdigo"); Encabezado.add("Nombre"); Encabezado.add("Ap. Paterno"); Encabezado.add("Num. Documento");

tblCliente.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tblCliente.getTableHeader().setReorderingAllowed(false); tblCliente.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { if (e.getClickCount()==2) modifica(); }

152

153

}); } return tblCliente; }

private JToolBar getTlbCliente() { if (tlbCliente == null) { tlbCliente = new JToolBar(); tlbCliente.setBounds(new Rectangle(2, 1, 427, 51)); tlbCliente.setBorder(BorderFactory.createBevelBorder(BevelBorder.R AISED)); tlbCliente.setFloatable(false); tlbCliente.add(getBtnLimpiar()); tlbCliente.add(getBtnRegistrar()); tlbCliente.add(getBtnModificar()); tlbCliente.add(getBtnEliminar()); tlbCliente.add(getBtnBuscar()); tlbCliente.add(getBtnSalir()); } return tlbCliente; }

private JButton getBtnLimpiar() { if (btnLimpiar == null) { btnLimpiar = new JButton(); btnLimpiar.setToolTipText("Limpiar"); btnLimpiar.setIcon(new ImageIcon(getClass().getResource("/Iconos/limpiar.png"))); btnLimpiar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { limpiar(); } }); } return btnLimpiar; }

153

154

rbtnJuridico.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { cambia_check(1); } }); } return rbtnJuridico; } }

4. Men principal package presentacion; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JToolBar; import java.awt.Rectangle; import javax.swing.JButton; import javax.swing.ImageIcon; import javax.swing.JLabel; import java.awt.Font; import java.awt.Dimension; import java.awt.Frame; import java.awt.GridBagLayout; import javax.swing.SwingConstants; import Bean.PermisoBean; import Bean.UsuarioBean; import Logic.GestorUsuario; import java.awt.Color; import java.util.List; import java.awt.event.KeyEvent; public class FrmMenuPrincipal extends JFrame { private FrmMantenimientoCliente mantCliente=null;

154

155

private FrmCambiarContrasena vent_cambiarContrasena=null; private FrmMantenerPaquete vent_MantPaquete=null; private FrmCargarRestaurantes vent_restaurantes; private FrmReportes rep_venta; private FrmReporteDestFrec rep_destinos; private GestorUsuario g_usuario; private FrmVentaPaquete vent_Ventas;

private FrmArmarPaquete armarPaquete=null; private FrmMantSeguro MantSeguro=null; private FrmMantUsuario vent_usuario=null; private FrmMantTemporadas MantTemporadas=null; private FrmPromocion MantPromocion=null; private FrmMantActividades MantActividades=null; private FrmCargarHoteles vent_cargarHotel=null; private FrmCargarVuelos vent_cargarVuelo=null; private FrmCargarViajesTerrestres vent_cargarViajesTer=null; private FrmCargarViajesMar vent_cargarViajesMar=null; private FrmMantPerfiles vent_perfil=null; private FrmReporteTipoviaje rep_Tipoviaje=null; private FrmReporteVentasXUsuario rep_ventas=null; private FrmDesbloquearReserva vent_DesbReserva=null; private UsuarioBean usuario; // @jve:declindex=0: private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JMenuBar jJMenuBar = null; private JMenu mnuMantenimientos = null; private JMenu mnuVentas = null; private JMenuItem mnuiUsuario = null; private JMenu mnuReportes = null;

155

156

private JMenuItem mnuiCliente = null; private JMenuItem mnuiPaquete = null; private JMenuItem mnuiPerfil = null; private JMenuItem mnuiArmarPaquete = null; private JMenuItem mnuiSeguro = null; private JMenuItem mnuiTemporadas = null; private JMenuItem mnuiPromocion = null; private JMenuItem mnuiActividades = null; private JMenu mnuCargarXml = null; private JMenuItem mnuiHoteles = null; private JMenuItem mnuiVuelos = null; private JMenuItem mnuiTerrestres = null; private JMenuItem mnuiViajesMartimos = null; private JMenu mnuOpciones = null; private JMenuItem mnuiCambiarContrasena = null; private JLabel lblTiempo = null; //private JLabel lblTiempoHilo = new JLabel(); private HiloHora Hilo; private JMenuItem mnuiSalir = null; private JLabel lblHoraHilo = null; private JPanel pnlHora = null; private JLabel lblUsuario = null; private JLabel lblNombre = null; private JToolBar tlbMenuPrincipal = null; private JButton btnAyuda = null; private JButton btnReporte = null; private JButton btnSalir = null; private JLabel jLabel = null; private JMenuItem mnuiTipoViaje = null; private JMenuItem mnuiVentasXUsuario = null; private JMenuItem mnuiDesbloquearReserva = null; private JButton btnMantenimiento = null; private JMenuItem mnuiCargarRestaurante = null; private JMenuItem mnuiDestinoFrecuente = null; private JMenuItem mnuiVentas = null; private JButton btnXml = null; private JMenuItem mnuiVta = null; /** * This is the default constructor */

156

157

public FrmMenuPrincipal() { super(); lblHoraHilo=new JLabel(); //lblTiempo=new JLabel(); initialize(); Hilo=new HiloHora(this.lblHoraHilo); Hilo.start(); //this.setExtendedState(JFrame.MAXIMIZED_B OTH); this.setResizable(false); this.g_usuario=new GestorUsuario(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(655, 562); //this.setExtendedState(Frame.MAXIMIZED_BO TH); this.setJMenuBar(getJJMenuBar()); this.setContentPane(getJContentPane()); this.setTitle("Menu Principal");

} public void setObjUsuario(UsuarioBean usuario){ this.usuario=usuario; this.lblNombre.setText(usuario.getNombre()+" "+usuario.getAppaterno()); }

/** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) {

157

158

jLabel = new JLabel(); jLabel.setBounds(new Rectangle(-1, 69, 649, 371)); jLabel.setIcon(new ImageIcon(getClass().getResource("/Iconos/travelsoft8.GIF"))); jLabel.setText(""); lblHoraHilo = new JLabel(); lblHoraHilo.setFont(new Font("Dialog", Font.BOLD, 14)); lblHoraHilo.setBounds(new Rectangle(456, 23, 163, 27)); lblHoraHilo.setForeground(Color.blue); lblHoraHilo.setText(""); lblTiempo = new JLabel(); lblTiempo.setFont(new Font("Dialog", Font.BOLD, 14)); lblTiempo.setBounds(new Rectangle(286, 23, 153, 28)); lblTiempo.setHorizontalAlignment(SwingConsta nts.RIGHT);

mnuMantenimientos.setText("Mantenimientos"); mnuMantenimientos.setMnemonic(KeyEvent.VK _M); mnuMantenimientos.add(getMnuiUsuario()); mnuMantenimientos.add(getMnuiCliente()); mnuMantenimientos.add(getMnuiPaquete()); mnuMantenimientos.add(getMnuiPerfil()); mnuMantenimientos.add(getMnuiSeguro()); mnuMantenimientos.add(getMnuiTemporadas()); mnuMantenimientos.add(getMnuiPromocion()); mnuMantenimientos.add(getMnuiActividades()); mnuMantenimientos.add(getMnuiVta());

158

159

} return mnuMantenimientos; } /** * This method initializes mnuVentas * * @return javax.swing.JMenu */ private JMenu getMnuVentas() { if (mnuVentas == null) { mnuVentas = new JMenu(); mnuVentas.setText("Ventas"); mnuVentas.setMnemonic(KeyEvent.VK_V); mnuVentas.add(getMnuiArmarPaquete()); mnuVentas.add(getMnuiDesbloquearReserva()); } return mnuVentas; } /** * This method initializes mnuiUsuario * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiUsuario() { if (mnuiUsuario == null) { mnuiUsuario = new JMenuItem(); mnuiUsuario.setText("Usuario"); mnuiUsuario.setMnemonic(KeyEvent.VK_U); mnuiUsuario.setEnabled(false); mnuiUsuario.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_usuario==null) vent_usuario=new FrmMantUsuario(); vent_usuario.limpiar(); vent_usuario.setVisible(true); }

159

160

}); } return mnuiUsuario; } /** * This method initializes mnuReportes * * @return javax.swing.JMenu */ private JMenu getMnuReportes() { if (mnuReportes == null) { mnuReportes = new JMenu(); mnuReportes.setText("Reportes"); mnuReportes.setMnemonic(KeyEvent.VK_R); mnuReportes.add(getMnuiTipoViaje()); mnuReportes.add(getMnuiVentasXUsuario()); mnuReportes.add(getMnuiDestinoFrecuente()); mnuReportes.add(getMnuiVentas()); } return mnuReportes; } /** * This method initializes mnuiCliente * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiCliente() { if (mnuiCliente == null) { mnuiCliente = new JMenuItem(); mnuiCliente.setText("Cliente"); mnuiCliente.setMnemonic(KeyEvent.VK_C); mnuiCliente.setEnabled(false); mnuiCliente.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (mantCliente==null)

160

161

mantCliente= new FrmMantenimientoCliente(); mantCliente.limpiar(); mantCliente.cambia_check(0); mantCliente.setVisible(true); } }); } return mnuiCliente; }

private JMenuItem getMnuiPerfil() { if (mnuiPerfil == null) { mnuiPerfil = new JMenuItem(); mnuiPerfil.setText("Perfil"); mnuiPerfil.setMnemonic(KeyEvent.VK_F); mnuiPerfil.setEnabled(false); mnuiPerfil.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_perfil==null) vent_perfil=new FrmMantPerfiles(); vent_perfil.limpiar(); vent_perfil.setVisible(true); } }); } return mnuiPerfil; } private JMenuItem getMnuiArmarPaquete() { if (mnuiArmarPaquete == null) { mnuiArmarPaquete = new JMenuItem(); mnuiArmarPaquete.setText("Armar Paquete"); mnuiArmarPaquete.setMnemonic(KeyEvent.VK_ Q);

161

162

mnuiArmarPaquete.setEnabled(false); mnuiArmarPaquete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("1"); if (armarPaquete==null) armarPaquete= new FrmArmarPaquete(); armarPaquete.setUsuario(usuario); armarPaquete.limpiartodo(); armarPaquete.setTipo(0); armarPaquete.setVisible(true); } }); } return mnuiArmarPaquete; }

private JMenuItem getMnuiSeguro() { if (mnuiSeguro == null) { mnuiSeguro = new JMenuItem(); mnuiSeguro.setText("Seguro"); mnuiSeguro.setMnemonic(KeyEvent.VK_S); mnuiSeguro.setEnabled(false); mnuiSeguro.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (MantSeguro==null) MantSeguro= new FrmMantSeguro(); MantSeguro.actualiza(); MantSeguro.limpiar();

162

163

MantSeguro.setVisible(true); } }); } return mnuiSeguro; } /** * This method initializes mnuiTemporadas * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiTemporadas() { if (mnuiTemporadas == null) { mnuiTemporadas = new JMenuItem(); mnuiTemporadas.setText("Temporadas"); mnuiTemporadas.setMnemonic(KeyEvent.VK_T ); mnuiTemporadas.setEnabled(false); mnuiTemporadas.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (MantTemporadas==null) MantTemporadas= new FrmMantTemporadas(); MantTemporadas.setVisible(true); } }); } return mnuiTemporadas; } /** * This method initializes mnuiPromocion * * @return javax.swing.JMenuItem */

163

164

private JMenuItem getMnuiPromocion() { if (mnuiPromocion == null) { mnuiPromocion = new JMenuItem(); mnuiPromocion.setText("Promocin"); mnuiPromocion.setMnemonic(KeyEvent.VK_N); mnuiPromocion.setEnabled(false); mnuiPromocion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (MantPromocion==null) private JMenuItem getMnuiVuelos() { if (mnuiVuelos == null) { mnuiVuelos = new JMenuItem(); mnuiVuelos.setText("Vuelos Areos"); mnuiVuelos.setEnabled(false); mnuiVuelos.setMnemonic(KeyEvent.VK_UNDE FINED); mnuiVuelos.setToolTipText("Vuelos Areos"); mnuiVuelos.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_cargarVuelo==null) vent_cargarVuelo=new FrmCargarVuelos(); vent_cargarVuelo.setVisible(true); } }); } return mnuiVuelos; } /** * This method initializes mnuiTerrestres

164

165

* * @return javax.swing.JMenuItem */ private JMenuItem getMnuiTerrestres() { if (mnuiTerrestres == null) { mnuiTerrestres = new JMenuItem(); mnuiTerrestres.setText("Viajes Terrestres"); mnuiTerrestres.setEnabled(false); mnuiTerrestres.setToolTipText("Viajes Terrestres"); mnuiTerrestres.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_cargarViajesTer==null) vent_cargarViajesTer=new FrmCargarViajesTerrestres(); vent_cargarViajesTer.setVisible(true); } }); } return mnuiTerrestres; } /** * This method initializes mnuiViajesMartimos * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiViajesMartimos() { if (mnuiViajesMartimos == null) { mnuiViajesMartimos = new JMenuItem(); mnuiViajesMartimos.setText("Viajes Martimos"); mnuiViajesMartimos.setEnabled(false); mnuiViajesMartimos.setToolTipText("Viajes Martimos");

165

166

mnuiViajesMartimos.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_cargarViajesMar==null) vent_cargarViajesMar=new FrmCargarViajesMar(); vent_cargarViajesMar.setVisible(true); } }); } return mnuiViajesMartimos; } /** * This method initializes mnuOpciones * * @return javax.swing.JMenu */ private JMenu getMnuOpciones() { if (mnuOpciones == null) { mnuOpciones = new JMenu(); mnuOpciones.setText("Opciones"); mnuOpciones.setMnemonic(KeyEvent.VK_O); mnuOpciones.add(getMnuiCambiarContrasena()) ; mnuOpciones.add(getMnuiSalir()); } return mnuOpciones; } /** * This method initializes mnuiCambiarContrasena * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiCambiarContrasena() { if (mnuiCambiarContrasena == null) {

166

167

mnuiCambiarContrasena = new JMenuItem(); mnuiCambiarContrasena.setText("Cambiar Contrasea"); mnuiCambiarContrasena.setMnemonic(KeyEvent .VK_UNDEFINED); mnuiCambiarContrasena.setEnabled(true); mnuiCambiarContrasena.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_cambiarContrasena==null) vent_cambiarContrasena=new FrmCambiarContrasena(); vent_cambiarContrasena.limpiar(); vent_cambiarContrasena.setobjUsuario(usuario); vent_cambiarContrasena.setVisible(true); } }); } return mnuiCambiarContrasena; } public void enables_forms(String permiso){ if (permiso.equals("m_cliente")) this.mnuiCliente.setEnabled(true); if(permiso.equals("m_usuario")) this.mnuiUsuario.setEnabled(true); if (permiso.equals("m_seguro")) this.mnuiSeguro.setEnabled(true); if (permiso.equals("m_promocion")) this.mnuiPromocion.setEnabled(true); if(permiso.equals("m_actividades")) this.mnuiActividades.setEnabled(true); if(permiso.equals("m_perfil")) this.mnuiPerfil.setEnabled(true);

167

168

if (permiso.equals("m_paquete")) this.mnuiPaquete.setEnabled(true); if(permiso.equals("armar_paquete")) this.mnuiArmarPaquete.setEnabled(true); if (permiso.equals("m_temporadas")) this.mnuiTemporadas.setEnabled(true); if (permiso.equals("desbloquear_reserva")) this.mnuiDesbloquearReserva.setEnabled(true); if(permiso.equals("reportes")) { this.mnuiTipoViaje.setEnabled(true); this.mnuiVentas.setEnabled(true); this.mnuiVentasXUsuario.setEnabled(true); this.mnuiDestinoFrecuente.setEnabled(true); this.btnReporte.setEnabled(true); } if (permiso.equals("cargaXML")) { this.mnuiHoteles.setEnabled(true); this.mnuiVuelos.setEnabled(true); this.mnuiTerrestres.setEnabled(true); this.mnuiViajesMartimos.setEnabled(true); this.mnuiCargarRestaurante.setEnabled(true); } } public void habilita_forms(){ List permisos=this.g_usuario.getPerfilesUsuario(usuario.getNick()); Integer ind=0; while (ind<permisos.size()) { PermisoBean permiso=(PermisoBean)permisos.get(ind); this.enables_forms(permiso.getDescripcion());

168

169

//System.out.println(permiso.getDescripcion()); ind++; } } lblUsuario.setHorizontalTextPosition(SwingCons tants.RIGHT); lblUsuario.setHorizontalAlignment(SwingConsta nts.RIGHT); lblUsuario.setForeground(Color.blue); lblUsuario.setText("Usuario :"); pnlHora = new JPanel(); pnlHora.setLayout(null); pnlHora.setBounds(new Rectangle(0, 440, 651, 65)); pnlHora.add(lblHoraHilo, null); pnlHora.add(lblTiempo, null); pnlHora.add(lblUsuario, null); pnlHora.add(lblNombre, null); } return pnlHora; } /** * This method initializes tlbMenuPrincipal * * @return javax.swing.JToolBar */ private JToolBar getTlbMenuPrincipal() { if (tlbMenuPrincipal == null) { tlbMenuPrincipal = new JToolBar(); tlbMenuPrincipal.setBounds(new Rectangle(1, 6, 647, 57)); private JButton getBtnSalir() { if (btnSalir == null) { btnSalir = new JButton(); btnSalir.setIcon(new ImageIcon(getClass().getResource("/Iconos/salir1.png"))); btnSalir.setToolTipText("Salir"); btnSalir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) {

169

170

FrmMenuPrincipal.this.Hilo.finaliza(); usuario.setConectado(false); g_usuario.setConectado(usuario); System.exit(0); } }); } return btnSalir; } /** * This method initializes mnuiTipoViaje * * @return javax.swing.JMenuItem */ private JMenuItem getMnuiTipoViaje() { if (mnuiTipoViaje == null) { mnuiTipoViaje = new JMenuItem(); mnuiTipoViaje.setText("Tipo de Viajes"); mnuiTipoViaje.setEnabled(false); private JButton getBtnXml() { if (btnXml == null) { btnXml = new JButton(); btnXml.setIcon(new ImageIcon(getClass().getResource("/Iconos/niZe - XML.PNG"))); btnXml.setToolTipText("Cargar Hoteles"); btnXml.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (vent_cargarHotel==null) vent_cargarHotel=new FrmCargarHoteles(); vent_cargarHotel.setVisible(true); } }); } return btnXml; }

170

171

vent_Ventas=new FrmVentaPaquete(); vent_Ventas.setVisible(true); } }); } return mnuiVta; } } 5. Nuevo Cliente package presentacion; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.GridBagLayout; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JComboBox; import java.awt.Color; import javax.swing.BorderFactory; import java.awt.Toolkit; import javax.swing.JButton; import javax.swing.SwingConstants; import javax.swing.ImageIcon; import javax.swing.border.TitledBorder; import java.awt.Font; import java.awt.event.KeyEvent; import javax.swing.JRadioButton; import java.lang.Object; import Bean.ClienteBean; import Bean.UsuarioBean; import Logic.GestorCliente;

public class FrmNuevoCliente extends JFrame {

171

172

private static final long serialVersionUID = 1L; private FrmMantenimientoCliente vent_mantCliente; private GestorCliente g_cliente; private boolean esEmpresa; private JPanel jContentPane = null; private JPanel pnlCliente = null; private JLabel lblCodigo = null; private JTextField tbxCodigo = null; private JLabel lblNombre = null; private JTextField tbxNombre = null; private JLabel lblApePaterno = null; private JTextField tbxApPaterno = null; private JLabel lblApeMaterno = null; private JTextField tbxApMaterno = null; private JLabel lblDNI = null; private JTextField tbxDni = null; private JLabel lblDireccion = null; private JTextField tbxDireccion = null; private JLabel lblEdad = null; private JTextField tbxEdad = null; private JLabel lblSexo = null; private JComboBox cbxSexo = null; private JLabel lblTelefono = null; private JTextField tbxTelefono = null; private JLabel lblEmail = null;

172

173

private JTextField tbxEmail = null; private JLabel lblRUC = null; private JTextField tbxRuc = null; private JRadioButton rbtnDni = null; private JRadioButton rbtnRuc = null; private JButton btnRegistrar = null; private JButton btnCancelar = null; private Integer tipo;//tipo=0 registrar,tipo=1 modificar // @jve:decl-index=0: /** * This is the default constructor */ public FrmNuevoCliente() { super(); g_cliente=new GestorCliente(); initialize(); this.setResizable(false); this.setResizable(false); } public void setVentana_mantenimiento(FrmMantenimientoCliente vent_mantCliente) { this.vent_mantCliente=vent_mantCliente; } public void carga_cliente(Integer codigo){ ClienteBean cliente; cliente=this.g_cliente.getCliente(codigo); this.carga_datos(cliente); } public void setEsEmpresa(boolean esEmpresa){ this.esEmpresa=esEmpresa; } public void carga_datos(ClienteBean cliente){ this.tbxCodigo.setText(cliente.getIdcliente().toStr ing());

173

174

if(!esEmpresa) {this.tbxApPaterno.setText(cliente.getApepaterno ()); this.tbxApMaterno.setText(cliente.getApematern o()); this.tbxEdad.setText(cliente.getEdad().toString()) ; this.tbxDni.setText(cliente.getNumdocumento()); if (cliente.getSexo().equals("Masculino")) this.cbxSexo.setSelectedIndex(0); else this.cbxSexo.setSelectedIndex(1); this.cambia_lblnombre(0); tbxRuc.setEditable(false); tbxDni.setEditable(true); rbtnDni.setSelected(true); rbtnRuc.setSelected(false); } else {this.cambia_lblnombre(1); tbxRuc.setEditable(true); tbxDni.setEditable(false); rbtnRuc.setSelected(true); rbtnDni.setSelected(false); }

this.tbxNombre.setText(cliente.getNombre()); this.tbxDireccion.setText(cliente.getDireccion()); this.tbxEmail.setText(cliente.getEmail()); this.tbxTelefono.setText(cliente.getTelefono()); this.tbxRuc.setText(cliente.getRuc()); } public void setDatos(){ if (this.tipo==0) { this.setTitle("Registrar Cliente");

174

175

this.btnRegistrar.setText("Registrar"); this.calcula_codigoMax(); this.rbtnDni.setSelected(true); this.rbtnRuc.setSelected(false); this.tbxRuc.setEditable(false); this.cambia_lblnombre(0); } else { this.setTitle("Modificar Cliente"); this.btnRegistrar.setText("Modificar"); //this.carga_usuario(); } } public void setTipo(Integer tipo){ this.tipo=tipo; } public void calcula_codigoMax(){ this.tbxCodigo.setText(g_cliente.getMaxId().toSt ring()); } public ClienteBean getObjCliente(){ ClienteBean cliente=new ClienteBean(); String sexo; cliente.setIdcliente(Integer.parseInt(tbxCodigo.ge tText())); cliente.setNombre(this.tbxNombre.getText()); cliente.setNumdocumento(this.tbxDni.getText()); cliente.setApepaterno(this.tbxApPaterno.getText( )); cliente.setApematerno(this.tbxApMaterno.getTex t()); if(!esEmpresa) {

175

176

cliente.setEdad(Integer.parseInt(this.tbxEdad.get Text())); sexo=(String) this.cbxSexo.getItemAt(this.cbxSexo.getSelectedIndex()); cliente.setSexo(sexo); } cliente.setEmail(this.tbxEmail.getText()); cliente.setDireccion(this.tbxDireccion.getText()); cliente.setRuc(this.tbxRuc.getText()); cliente.setTelefono(this.tbxTelefono.getText()); //estado=(String)this.cb.getItemAt(this.cbxEstado .getSelectedIndex()); cliente.setEstado("Registrado"); return cliente; } public void inserta(){ if (this.datos_validos("Registrar Cliente")) {boolean exito; ClienteBean cliente; cliente=this.getObjCliente(); exito=this.g_cliente.Inserta(cliente); System.out.println(exito); if (exito) {JOptionPane.showMessageDialog(this, "Se registro correctamete al cliente", "Registrar Cliente",JOptionPane.INFORMATION_MESSAGE); this.limpiar(); this.vent_mantCliente.busca_clientes(); this.calcula_codigoMax(); } else JOptionPane.showMessageDialog(this, "No se registro correctamete al cliente", "Registrar Cliente",JOptionPane.ERROR_MESSAGE); } }

176

177

public boolean datos_validos(String ventana){ boolean correcto=true; if(!esEmpresa) {if(this.tbxNombre.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar el nombre.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxApPaterno.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar el apellido paterno.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxApMaterno.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar el apellido materno.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxEdad.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar la edad.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxTelefono.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar el nmero de telfono.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.cbxSexo.getSelectedIndex()==-1) {JOptionPane.showMessageDialog(this, "Debe seleccionar el sexo.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxDireccion.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar la direccin.",ventana,JOptionPane.ERROR_MESSAGE); return false; }

177

178

if(this.tbxEmail.getText().length()==0) {JOptionPane.showMessageDialog(this, "Debe ingresar el correo electrnico.",ventana,JOptionPane.ERROR_MESSAGE); return false; } if(this.tbxEdad.getText().length()!=2) {JOptionPane.showMessageDialog(this, "La edad debe ser de 2 dgitos.",ventana,JOptionPane.ERROR_MESSAGE); return false; } } return correcto; } public void modifica(){ if (this.datos_validos("Modificar Cliente")) {boolean exito; ClienteBean cliente; cliente=this.getObjCliente(); exito=this.g_cliente.Modifica(cliente); if (exito) {JOptionPane.showMessageDialog(this, "Se modific correctamete al cliente.", "Modificar Cliente",JOptionPane.INFORMATION_MESSAGE); this.vent_mantCliente.busca_clientes(); this.dispose(); } else JOptionPane.showMessageDialog(this, "No se modific correctamete al cliente.", "Modificar Cliente",JOptionPane.ERROR_MESSAGE); } }

178

179

OBJETIVOS Implementar un sistema o aplicacin grfica utilizando Swing. Presentar los entornos grficos del proyetco final.

179

180

OBJETIVOS Implementar un sistema o aplicacin utilizando conexin a base de datos.

JDBC
JDBC fue diseado para mantener sencillas las cosas sencillas. Esto significa que el API JDBC hace muy sencillas las tareas diarias de una base de datos, como una simple sentencia SELECT. JDBC proporciona a los desarrolladores de base de datos una serie de poderosas y flexibles herramientas que permiten escribir aplicaciones de base de datos con una interface estndar. Los mtodos definidos en JDBC operan independiente de la base de datos. Se usan las mismas tcnicas de programacin para hacer cualquiera de las siguientes tareas si se usa DB2, Oracle, Informix, SQLServer, mySQL, o cualquier otra base de datos: Abrir o cerrar una conexin Llamar procedimientos Agregar, modificar, o eliminar data usando sentencias SQL DML

180

181

Ejecutar sentencias DDL Manejar errores de base de datos

Como se puede notar, tener una sola interface proporciona muchos beneficios, como trabajar con mltiples bases de datos. JDBC generaliza las funciones de acceso a datos ms comunes. Las clases estn contenidas en los paquetes: java.sql y javax.sql

1.1 Arquitectura de JDBC

El API de JDBC ofrece una serie de interfaces Java que permiten establecer conexiones con bases de datos particulares, ejecutar sentencias SQL y procesar los resultados. Las interfaces ms importantes son las siguientes: java.sql.DriverManager Permite cargar los controladores JDBC especficos para cada DBMS y establecer conexiones con bases de datos. java.sql.Statement Permite ejecutar sentencias SQL dada una conexin ya establecida. Esta interface tiene dos subtipos bastante importantes: java.sql.PreparedStatement para ejecutar sentencias SQL precompiladas y java.sqlCallableStatement para llamar procedimientos almacenados en la base de datos. java.sql.ResultSet Permite acceder al resultado de una consulta SQL hecha a la base de datos. java.sql.ResultSetMetaData Tiene informacin sobre el conjunto de resultados, como el nmero de columnas que tiene la consulta, de filas, etc. La figura siguiente, muestra la interrelacin entre estas interfaces segn el modelo de objetos de la especificacin de JDBC. 181

182

1.2 La interface Connection

Representa una conexin con una base de datos. Una aplicacin puede tener ms de una conexin a ms de una base de datos. Una conexin (sesin) con una especfica base de datos, permite ejecutar sentencias SQL y retornar resultados dentro del contexto de la conexin. Una conexin permite proporcionar informacin de la base de datos como, descripcin de las tablas de la base de datos, la gramtica SQL soportada, los procedimientos almacenados, las capacidades de conexin, y ms. 182

183

Esta informacin se obtiene con el mtodo getMetaData. La conexin se establece a travs del driver, que se carga en ejecucin mediante el mtodo: Class.forName(String nombredelDriver) Una vez cargado el driver, la conexin a la BD se realiza invocando a alguno de los siguientes mtodos de la clase java.sql.DriverManager : Connnection getConnection(String url, java.util.Properties info) Connnection getConnection(String url, String usr, String pwd) Connnection getConnection(String url) El objeto Connection que devuelve el programa se usa para realizar todas las operaciones sobre la BD. El siguiente cdigo de programa muestra una tpica conexin de base de datos: ... Connection miConexion; try { Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); //Driver // URL de la Base de Datos (Nombre del ODBC) miConexion = DriverManager.getConnection(jdbc:odbc:empleadosDB); ........ } catch (ClassNotFounException e1) { // captura el error: no se encontr el driver } catch (SQLException e2) { // captura el error: no se pudo conectar a la BD } public boolean isCellEditable(int row, int col) { return false; } }

A partir de este momento el objeto miConexin ser usado en el resto del programa para realizar todas las operaciones sobre la Base de Datos.

183

184

Al crear una conexin se debe manejar dos excepciones. Una es para controlar si el Driver no ha sido encontrado y la otra para verificar si se realiz la conexin. Nota: Por defecto un objeto Connection est en modo auto-commit, que significa que automticamente se hace commit a los cambios despus de ejecutar una sentencia. Si el modo auto-commit ha sido deshabilitado, el mtodo commit debe llamarse explcitamente para hacer permanentes los cambios; de otra manera, los cambios no sern guardados en la base de datos.

1.3 La interface Statement

Es el objeto utilizado para ejecutar una sentencia SQL esttica y retornar los resultados que produce. Una vez que se establece una conexin con una base de datos en particular, esa conexin puede ser usada para enviar sentencias sql. Un objeto Statement es creado con el mtodo createStatement del objeto Connection, como se muestra en el fragmento de cdigo siguiente: Connection con = DriverManager.getConnection(url, admin, ); Statement stmt = con.createStatement(); La sentencia SQL que enviaremos a la base de datos es proporcionada como argumento para uno de los mtodos execute de un objeto Statement. Esto se muestra en el siguiente ejemplo, que usa el mtodo executeQuery: ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Tabla); La variable rs contiene el resultado de ejecutar la sentencia. Nota: Por defecto, slo un objeto ResultSet puede ser abierto al mismo tiempo por un objeto Statement. Por lo tanto, si la lectura de un objeto ResultSet est intercalada con la lectura de otro, cada uno debera haber sido generado por diferentes objetos Statement. Todos los mtodos de ejecucin de la interface Statement implcitamente cierran el actual objeto ResultSet si existe alguno abierto en el objeto Statement.

184

185

1.4 La interface Resultset Un ResultSet es un objeto Java que contiene el resultado de ejecutar una consulta SQL en la base de datos. En otras palabras, contiene las filas que satisfacen las condiciones de la consulta. La interface ResultSet proporciona mtodos para obtener (getBoolean, getLong, y ms) los valores de las varias columnas de la fila actual. Los valores pueden ser obtenidos usando el ndice o el nombre de la columna. En general, usar el ndice de la columna es ms eficiente. Las columnas estn numeradas desde el 1. El mtodo next mueve el cursor del objeto ResultSet a la siguiente fila haciendo la fila actual, y retorna false cuando no hay ms filas. este mtodo se puede utilizar en un bucle while para recorrer el juego de resultados. Inicialmente el cursor est posicionado antes de la primera fila. Un objeto ResultSet por defecto no es actualizable y tiene un cursor que se mueve slo hacia adelante. Por lo que, slo se puede recorrer el ResulSet una vez y slo de la primera a la ltima fila. Es posible crear objetos ResultSet que se pueden mover adelante y atrs (scrollable), y que son actualizables. Por ejemplo: Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(SELECT a, b,c FROM TABLA); En el segmento de cdigo anterior rs es scrollable, cambios hechos por otros, y es actualizable. 1.5 La interface ResultsetMetaData Es un objeto que puede ser usado para obtener informacin sobre los tipos y propiedades de las columnas en un objeto ResultSet. El siguiente fragmento de cdigo crea un objeto ResultSet rs, crea el objeto ResultSetMetaData rsmd, y usa rsmd para averiguar cuntas columnas tiene rs y si la primera columna en rs puede ser usada en una clasula WHERE. ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM TABLE2); ResultSetMetaData rsmd = rs.getMetaData(); 185 no muestra

186

int numberOfColumns = rsmd.getColumnCount(); boolean b = rsmd.isSearchable(1); El siguiente fragmento de cdigo imprime los nombres de todas las columnas en el objeto ResultSet rs. ResultSetMetaData rsmd = rs.getMetaData(); for ( int i=1; i <= rsmd.getColumnCount(); i++ ) System.out.println(rsmd.getColumnName(i)); 1.6 Ejercicio 1 Cree un formulario que muestre una consulta a la tabla Authors de la base datos Pubs de SQLServer.

Ejemplo1JDBC.java public class Ejemplo1JDBC extends JFrame { private JTable jTable; private DefaultTableModel tableModel; public Ejemplo1JDBC(String s) { super(s); jTable = new JTable(); tableModel = new DefaultTableModel(); try{ Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection cn = DriverManager.getConnection(jdbc:odbc:dsnPubs); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(Select * from Authors); ResultSetMetaData rsmd = rs.getMetaData(); for (int i=1; i <= rsmd.getColumnCount(); i++){ tableModel.addColumn(rsmd.getColumnName(i));} Object[] row = new Object[rsmd.getColumnCount()]; while(rs.next()){ for (int i=1; i <= rsmd.getColumnCount(); i++){ row[i-1] = rs.getObject(i); } tableModel.addRow(row); } }catch(Exception e){ e.printStackTrace(); } jTable.setModel(tableModel); jTable.setPreferredScrollableViewportSize(new Dimension(600, 120)); 186 getContentPane().add(new JScrollPane(jTable)); pack();

187

1.7 Ejercicio 2 Cree un formulario que permita consultar registros de una base de datos utilizando el driver, el url y la sentencia sql especificados. 1.7 Ejercicio 2 Cree un formulario que permita consultar registros de una base de datos utilizando el driver, el url y la sentencia sql especificados.

import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Ejemplo2JDBC extends JFrame implements ActionListener{ private JTable jTable; private JTextField drvField; private JTextField urlField; private JTextField sqlField; private JButton bEjecutar; public Ejemplo2JDBC(String s) { super(s); JPanel contentPane = new JPanel(new BorderLayout()); jTable = new JTable(); jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); jTable.setPreferredScrollableViewportSize(new Dimension(600, 120)); contentPane.add(new JScrollPane(jTable),BorderLayout.CENTER); JPanel panel = new JPanel(new BorderLayout()); JPanel panelOeste = new JPanel(new GridLayout(3,1)); panelOeste.add(new JLabel(Driver: )); panelOeste.add(new JLabel(URL: )); panelOeste.add(new JLabel(SQL: )); 187 panel.add(panelOeste,BorderLayout.WEST); JPanel panelCentro = new JPanel(new GridLayout(3,1)); drvField = new JTextField(sun.jdbc.odbc.JdbcOdbcDriver,20);

188

panelCentro.add(drvField); panelCentro.add(urlField); panelCentro.add(sqlField); panel.add(panelCentro,BorderLayout.CENTER); JPanel panelSur = new JPanel(new FlowLayout(FlowLayout.RIGHT)); bEjecutar = new JButton(Ejecutar consulta); bEjecutar.addActionListener(this); panelSur.add(bEjecutar); panel.add(panelSur,BorderLayout.SOUTH); contentPane.add(panel,BorderLayout.NORTH); contentPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); setContentPane(contentPane); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt){ String drv = drvField.getText(); String url = urlField.getText(); String sql = sqlField.getText(); DefaultTableModel tableModel = new DefaultTableModel(); try{ Class.forName(drv); Connection cn = DriverManager.getConnection(url); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery (sql); ResultSetMetaData rsmd = rs.getMetaData(); for (int i=1; i <= rsmd.getColumnCount(); i++){ tableModel.addColumn(rsmd.getColumnName(i)); } Object[] row = new Object[rsmd.getColumnCount()]; while(rs.next()){ for (int i=1; i <= rsmd.getColumnCount(); i++){ row[i-1] = rs.getObject(i); } tableModel.addRow(row); } cn.close(); }catch(Exception e){ 188 e.printStackTrace(); } jTable.setModel(tableModel); }

189

2 CONSULTAS DE BASES DE DATOS


2.1 Consultas SQL El lenguaje estructurado de consultas SQL, mediante su instruccin Select nos permite poder consultar la base de datos y obtener de ella datos segn nuestros requerimientos. El formato de la instruccin Select es:

SELECT FROM WHERE GROUP BY HAVING ORDER BY

Campos Tablas Condicin de bsqueda Columna de agrupacin Condicin de bsqueda Especificacin de ordenacin

Ser obligatorio el uso de la clusula Select y From, pero las dems son opcionales.

Clausulas opcionales Where y Order By WHERE y condicin de bsqueda. Si la condicin de bsqueda es TRUE, la fila se incluye en los resultados de la bsqueda.

189

190

Test de comparacin(=,<>,<,<=,>,>=) Select Nombre from Empleados Where Sueldo >= 2000 Select Nombre from Empleados Where Contrato <= 01-Ene-90 Test de rango(Between)(Siempre incluye bordes) Select Nombre from Empleados Where Sueldo Between 2000 and 3000 Select Nombre from Empleados Where Contrato Not Between 01Ene-90 and 31-Dic-90 Test de pertenenencia a conjunto(IN) Select Nombre from Empleados Where Edad in(30,40,50) Test de correspondecia con patrn(LIKE) Select Nombre from Empleados Where Nombre Like P% Select Nombre from Empleados Where Nombre not Like P% Test de valor nulo(IS NULL) Select Nombre from Empleados Where Oficina is Null Select Nombre from Empleados Where Oficina is Not Null Condiciones de bsqueda(AND, OR, NOT) Select Nombre from Empleados Where Sueldo >= 2000 And Sueldo <= 3000 Select Nombre from Empleados Where Sueldo < 2000 Or Sueldo > 3000 Select Nombre from Empleados Where (Nombre Like P%) And (Contrato >= 01-Ene-90) And (Edad<30) ORDER BY (ASC DESC) Select Nombre from Empleados Where Sueldo > 2000 190

191

Order By Nombre Select Nombre from Empleados Where Sueldo > 2000 Order By Nombre Desc Select Nombre from Empleados Where Sueldo > 2000 Order By Nombre Asc, FechaNacimiento Desc

Consultas Sumarias SQL permite sumarizar datos de la base de datos mediante un conjunto de funciones de columna. Una funcin de columna SQL acepta una columna entera de datos como argumentos y produce un nico dato que sumariza la columna. Ejemplo: Cul es la cuota promedio y las ventas promedio de los vendedores? Select AVG(Cuota),AVG(Ventas) From Repventas AVG(Cuota) AVG(Ventas) $300,000 $289,353.20

SQL ofrece 6 funciones de columnas diferentes: SUM() numrica. AVG() columna MIN() MAX() columna. COUNT() de COUNT(*) columna. Calcula el total de una columna

Calcula el valor promedio de una numrica. Encuentra el valor ms pequeo de una columna. Encuentra el mayor valor de una Cuenta el nmero de valores efectivos una columna. Cuenta el nmero de filas de una

Clculo de total de una columna(SUM)

Cul es el rendimiento de cuota promedio de los vendedores? 191

192

Select AVG(100*(Ventas/Cuotas)) From Repventas AVG(100*(Ventas/Cuotas)) 102.60

Cules son las cuotas y ventas totales para todos los vendedores? Select SUM(Cuota),SUM(Ventas) From Repventas SUM(Cuota) SUM(Ventas) $2,700,000.00 $2,893,353.20

Cul es el total de los pedidos acepatados por Bill Adams? Select SUM(Importe) From Pedidos,Repventas Where Nombre=Bill Adams AndRep=Num_Empl SUM(Importe) $39,353.00

Clculo del promedio de una columna(AVG) Calcula el precio medio de los productos del fabricante ACI? Select AVG(Precio) From Productos Where ID_Fab = ACI AVG(Precio) $804.00 Cuantos son los empleados asignados a cada oficina? Select Cod_Oficina,Count(*) Cod_Oficina Cod_Oficina NULL 11 12 Count(*) 1 5 8 192 //Empleado sin oficina. From tblEmpleados Group By

193

13 .

. Condiciones de bsqueda de grupos(Clusula HAVING) Al igual que la clusula WHERE es utilizada para seleccionar o rechazar filas individuales que participan en una consulta, la clusula HAVING es utilizada para seleccionar o rechazar grupos de filas. El formato de la clusula HAVING es anlogo al de la clusula WHERE. La clusula HAVING especifica una condicin de bsqueda para grupos. Cul es el tamao de pedido promedio para cada vendedor cuyas ventas totalizan ms de $30000? Select Cod_Vendedor,AVG(Ventas) From tblVentas Group By Cod_Vendedor Having SUM(Ventas) > 30000 Cod_Vendedor AVG(Ventas) 105 $8234.00 106 $9234.00 112 $5001.00 .

Por cada oficina con dos o ms personas, calcular la cuota total y las ventas totales para todos los vendedores que trabajan en la oficina. Select Ciudad,SUM(Cuota),SUM(RepVentas.Ventas) From Oficinas, RepVentas Where Oficina=Oficina_Rep Group by Ciudad Having Count(*) >=2 Ciudad Chicago Los Angeles New York SUM(Cuota) $775,210.00 $700,000.00 $575,211.00 SUM(RepVentas.Ventas) $735,200.00 $835,400.00 $692,220.00

1.1 La interface PreparedStatement Una sentencia preparada (prepared statement) es un tipo de sentencia que mejora la performance de las consultas. Una sentencia preparada se precompila antes de ser usada. La versin precompilada acepta diferente nmero de parmetros.

193

194

A diferencia de las sentencias tradicionales cuando se crean requieren de la sentencia SQL como argumento del constructor. Esta sentencia es enviada al motor de BD para su compilacin y cuando se ejecuta el motor de BD la corre sin previa compilacin. Las sentencias preparadas manejan parmetros, con lo cual pueden ejecutarse muchas veces con distintos parmetros. Creacin de una sentencia preparada: PreparedStatement p_sent miConexion.prepareStatement(SELECT Apellido, FROM Empleados WHERE edad >?) // ? Parmetro de la sentencia SELECT = Nombre

Configuracin de los parmetros antes de la ejecucin de la sentencia: p_sent.setInt(1, 55); //Setea los parmetros de la sentencia pre-compilada ResultSet resul = p_sent.executeQuery(); // Ejecuta la sentencia pre-compilada Nota: Los mtodos set (setShort, setString, ...) para colocar valores a los parmetros IN deben especificar los tipos que son compatibles con el tipo SQL definido del prapmetro de entrada. Por ejemplo, si el parmetro IN tiene el tipo SQL INTEGER, entonces se debe usar el mtodo setInt. 1.2 Ejercicio 1 Desarrolle un programa que permita buscar empleados por apellido. Esto debe implementarse a modo de filtro, es decir que por defecto se mostrar un listado de todos los empleados y a medida que el usuario vaya digitando el apellido del empleado a buscar en la caja de texto, se irn mostrando los empleados cuyos apellidos empiezan con las letras ingresadas en la caja de texto.

La aplicacin consta de 2 clases: FormularioFiltro y PanelFiltro.

FormularioFiltro.java import javax.swing.*; public class FormularioFiltro extends JFrame { static int wF = 400, hF = 400; 194 public FormularioFiltro(String s) { super(s);

195

PanelFiltro.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class PanelFiltro extends JPanel { JLabel lblNombre = new JLabel(Apellido del Empleado a buscar >>); JTextField tfNombre = new JTextField(); JPanel panelNorte= new JPanel(new GridLayout(1,2)); JTextArea taListado = new JTextArea(); public PanelFiltro() { tfNombre.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent arg0) { ejecutaConsulta(); } }); setLayout(new BorderLayout()); panelNorte.add(lblNombre); panelNorte.add(tfNombre); add(panelNorte, BorderLayout.NORTH); add(new JScrollPane(taListado), BorderLayout.CENTER); ejecutaConsulta(); } public void ejecutaConsulta() { try { Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection(jdbc:odbc:dsnLPIV, sa, ); 195 Statement st = con.createStatement();

196

} public void listado(ResultSet r) { try { ResultSetMetaData rmeta = r.getMetaData(); // coleccin de metadata int numColumnas = rmeta.getColumnCount(); // nmero de columnas taListado.setText(); for (int i = 1; i <= numColumnas; ++i) taListado.append(rmeta.getColumnName(i) + \t\t\t); taListado.append(\n); taListado.append(============================================ ); taListado.append(\n); while (r.next()) { for (int i = 1; i <= numColumnas; ++i) taListado.append(r.getString(i) + \t\t); taListado.append(\n); } } catch (SQLException e) { System.out.println(e); } } }

196

197

197

198

OBJETIVOS Implementar un sistema o aplicacin grfica utilizando Swing. Presentar los entornos grficos del proyetco final.

CASO DE AGENCIA DE VIAJES Y HOTEL

Se desea implementar un sistema que permita sistematizar y controlar losporcesos que realiza una agencia de viajes que cuenta con servicios de hote, movilidad, turimos y paquetes de atencin al cliente. El sistema debe permitir a los usuarios controlar y emitir informes de produccin y ganacias comerciales. Para lo cual debeb leer las siguientes especificaciones:
Diagrama de Clases

198

199

Casos de uso

199

200

Mantener usuarios Mantener Promociones

Mantener moneda Mantener Seguro


<<include>>

Mantener Actualizaciones XML

Administrador de Sistema

Mantener temporada

Bucar ciudad

Mantener perfil Mantener paquete


<<extend>> <<extend>> <<include>> <<extend>>

<<include>>

<<extend>>

Bucar actividades Buscar transporte


<<extend>> <<extend>>

Buscar hotel

Buscar restaurante
<<include>>

Buscar pas

<<extend>>

<<extend>>

Mantener cliente

Usuario de ventas

Armar paquete

<<include>>

Mantener pasajeros

Mantener proforma de paquetes tursticos

Gerente de Ventas

Generar reporte

Usuario

Validar usuario

Usuario de Ventas

Gerente de Ventas

Administrador de Sistema

Uso de Componentes Las Etiquetas (JLabels) se deben usar para la identificacin de otros componentes. Adems pueden usarse para mostrar algn ttulo o 200

201

mensaje para el usuario. En los casos en que las etiquetas identifiquen campos indispensables a ingresar, estas llevaran a su izquierda un asterisco (*). En los casos en que se identifica un campo monetario se coloca en la parte derecha de la etiqueta el smbolo de soles (S/.) Todo el contenido de una ventana excepto los botones de Aceptar, Cancelar o Salir deben estar dentro de un JPanel, excepto para las ventanas tipo reporte. Las Cajas de Texto (JTextField) se deben utilizar para el ingreso de datos desconocidos al sistema, es decir, datos que el sistema no puede extraer a travs de relaciones con otros datos. Los JComboBox se deben utilizar para ingresar datos a eleccin que ya existen en el sistema, es decir, para establecer una relacin entre datos. Adems puede usarse para realizar una seleccin de una lista predeterminada. Los Radio Buttons deben usarse para el ingreso de datos de una lista predeterminada, solo si tiene 2 o 3 opciones. Tambin podr usarse para el ingreso de datos del tipo Verdadero o Falso. Tambin par Los CheckBox se deben usar para a seleccionar un grupo de elementos de una lista. La Grilla se utiliza para visualizar tablas. El DateTimePicker se debe usar para la seleccin de fechas. Los Botones de Comando son usados para la eleccin de acciones a realizar dentro de un determinado contexto. El JList ser para elegir opciones de una lista muy parecida al JComboBox.

Sobre el Diseo de Mens


Presentar los mens ordenados de izquierda a derecha segn la importancia para el usuario. Usar el menor nmero de niveles posibles. Los elementos de la barra de Men deben ser de una sola palabra. Se debe usar tipo de fuente San Serif, tamao de 10pts, color negro. Cada opcin de men puede ser elegido con la combinacin Alt. + letra. Los comandos del men que vayan a abrir una ventana deben tener puntos suspensivos () despus de su descripcin.

Sobre el Diseo de Componentes


Dimensiones

Los Botones deben tener un tamao de 88px de largo (como

201

202

mnimo) y 24px de alto. Las Cajas de Texto deben tener un alto de 24px. De largo deber tener un tamao tal que el nmero mximo de caracteres pueda visualizarse totalmente. Las Etiquetas deben tener el alto mnimo en el que se pueda ingresar el tipo de letra especificado en el punto 2.4.2. El largo deber ser el mnimo tal que todo el texto entre en una sola lnea. Las Grillas deben tener una dimensin tal que pueda visualizarse todas las columnas sin la necesidad de utilizar el scroll horizontal, siempre y cuando esto no afecte lo estipulado en el punto 2.2 Diseo de Pantallas. Los Radio Buttons deben seguir el mismo formato que las Etiquetas. Los Check Box deben tener el tamao mnimo de 8x8px. Los Combo Box deben medir 24px de altura. El largo debe ser medido de manera que la mayora de tems de la lista puedan entrar totalmente en el espacio de texto y no debe ser mas de dos caracteres mayor que el tem mximo de la lista. Los JList deben ser del largo necesario que sea necesario para cada caso pudindose usar alternativamente del scroll. De ancho debe ser lo mnimo para abarcar la palabra ms larga de la lista.

Propiedades

El tipo de fuente de cada componente debe ser Verdana, tamao de fuente 10pts y color blanco, a excepcin de los Buttons, cuyo tamao de fuente es 8pts. En el caso de los botones, se debe usar verbos en infinitivo para su descripcin. Adems en el caso de los botones se agregar una imagen alusiva a la funcin de este en la izquierda del nombre del botn. Estas pueden ser de los siguientes casos: Nombre de icono Abrir Ayuda Buscar Ver detalle Cancelar Eliminar Figura

202

203

Aceptar Continuar Guardar Imprimir Limpiar Salir

Sobre el Diseo de Pantallas


Dimensiones

La ventana principal debe ocupar todo el tamao de la pantalla. El resto de ventanas tendrn un tamao proporcional a la cantidad de componentes que estas contengan.

Distribucin de Componentes

La separacin entre los bordes y los componentes de las ventanas debe ser de mnimo 16px. Entre los JPanel la separacin vertical debe ser de mnimo 24px, la horizontal de 16px. La separacin horizontal entre cada componente debe ser de 24px, a excepcin de la combinacin Etiqueta (JLabel) con otro componente, en este caso debe ser 8px de separacin como mnimo. La separacin vertical de los componentes debe ser de 16px, a excepcin tambin de la combinacin de etiquetas con otro componente, en este caso la etiqueta debe alienarse al componente que acompaa. Los botones principales para todas las pantallas sern aceptar y cancelar (cuando se realice alguna actualizacin en los datos) o salir (cuando solo se visualicen los datos). Estos botones se mostrarn en la parte inferior de la ventana alineados a la derecha, a excepcin de las cajas de dialogo y mensajes en que deben ir centrados. Los botones secundarios para cualquier otro componente deben ubicarse al lado derecho del mismo. La grilla debe ocupar el ancho de la ventana, respetando los 16px de

203

204

separacin con los bordes. Todos los componentes deben estar alineados vertical y horizontalmente en la medida de lo posible. Para las ventanas de transacciones, el JLabel de identificacin de dicha transaccin, as como su JTextField, estarn situados en la parte superior derecha de la misma.

Propiedades

Generales
Las pantallas deben tener fondo color azul (aun por determinar) de Windows. El color de Fuente debe ser blanco (aun por determinar). Los ttulos de los Frames deben ser en Negrita. El tamao de fuente debe ser de 10pts, a excepcin de los botones, cuyo tamao ser de 8pts. Los marcos deben tener letra San Serif de 10pts y negrita. El tipo de fuente general debe ser San Serif.

De la Ventana Principal
No se podr redimensionar. No se podr minimizar. Contiene el men principal. Contiene un fondo de pantalla distintivo.

Del Resto de Ventanas


No se podrn redimensionar Podrn ser minimizadas y restauradas nicamente. Contiene diversos componentes para el manejo de informacin y para a ejecucin de comandos. No contienen men. Aparecen en el centro de la pantalla, con posibilidad de desplazamiento.

Tipos de Pantallas

Se definen los tipos de pantallas que servirn de base para la creacin de la mayora de pantallas que usar el sistema. 1. Lista: Estas pantallas muestran informacin requerida por el usuario a travs de grillas o tablas. Para configurar los datos que se mostrarn, estas pantallas pueden tener filtros los cuales se encontraran en la parte superior. Los componentes para el

204

205

filtrado o bsqueda se agruparn en forma vertical, alineados a la izquierda. De haber botones secundarios (btnAccion1 y btnAccion2 en el ejemplo) que realicen alguna accin sobre la lista (ej. modificar una entrada), deben ubicarse en la parte inferior de esta, alineados a la derecha. En los listados para terminar se debe utilizar el botn Salir. Estas pantallas ser n de tipo MDI_CHILD.

2. Editor: Estas pantallas permiten ingresar, modificar y eliminar la informacin de diferentes registros y tipos de datos que maneja el sistema. Tendrn bsicamente JTextField con los campos a editar y JLabels que describen dicho campo, tambin pueden presentar campos que describen y que son no editables (en este caso el JTextField ser de otro color). Mostrarn en la parte inferior izquierda el usuario y la fecha de ltima modificacin del registro que se esta editando. Solo tendrn los botones principales de toda ventana (Aceptar y Cancelar). Estas pantallas sern de tipo Modal.

205

206

3. Reportes: Estas pantallas permiten mostrar al usuario diferentes tipos de reportes, en base a un conjunto de parmetros ingresados por el usuario, la principal diferencia con los listados es que los reportes son de solo lectura (ej. Ordenes de compra que fueron entregadas en la fecha 20/10/2006). Todo reporte debe tener un ttulo que facilite su identificacin y sus elementos no se juntaran en un GroupBox. Para generar el reporte primero se debe configurar sus parmetros para lo cual se mostrar primero una ventana para elegir los criterios, de manera similar a los filtros de las pantallas tipo Lista. Se utilizan para las pantallas de configuracin de parmetros solo los botones Aceptar y Cancelar, y para los reportes los botones Guardar, Imprimir y Salir.

206

207

4. Mensaje: Estas pantallas permiten mostrar informacin al usuario. Pueden ser de varios tipos segn lo que se desea indicar.

5. Cajas de Dialogo: Estas pantallas permiten presentar y recoger 207

208

informacin. Son ventanas mviles de tamao fijo, aparece durante el procesamiento de una accin del usuario, cuando se requiere informacin para completarla. Slo utiliza los botones aceptar y cancelar. La figura est representada en el punto 4 de esta seccin.

Se debe tener en cuenta que puede existir la necesidad de crear pantallas que no se ajusten necesariamente a alguno de estos tipos mencionados, por lo que se deja libre la opcin de disear ventanas con un formato particular, siempre manteniendo en lo posible coherencia con el estilo mostrado y se gue por los dems puntos de este documento.

208

209

OBJETIVOS Programar el proyecto final del curso Aqu va el codigo del proyecto

2 Semanas para examenes 1 semana para sustentar el proyecto 1 semana de asesora del proyecto. 4+15 = 19 semanas

209

Potrebbero piacerti anche