jueves, 8 de septiembre de 2016

001_2 Interfaz y Base de Datos

001_2 INTERFAZ Y BASE DE DATOS
Entorno de trabajo y sus herramientas 
Ing Honoria Reyes Macedo


INTRODUCCION:
En esta practica se creara una interfaz para capturar materias, una interfaz para capturar personas y una interfaz para capturar calificaciones en java
Se usara una base de datos en MYSql llamada “calificaciones”



Utilizar JCreator, NetBeans, Eclipse u otro IDE para crear las interfaces en java.

Si no recuerdas como crear una intefaz en NetBeans visita el blog siguiente:

       http://abstracciondelpro.blogspot.mx/2016/04/practica-de-swingactividad-003.html

La primer interfaz permitira guardar datos en la entidad  materia
por lo que necesitamos los siguientes archivos:
a.- Conexion.java Para conectar desde java a la base de datos
b.- MateriaVo.java que contiene las propiedades de la entidad Materia 
c.- MateriaDAO.java que contiene los movimientos CRUD de Materia a la Base de Datos
d.- MateriaFrm.java que contiene los componentes graficos para capturar los datos

                Usar los nombres siguientes para los componentes respectivos para MateriaFrm.java:
                jp para el JPanel contenedor
y dentro del contenedor JPanel:
   jlnombremateria Para JLabel
               jlseriadanum Para JLabel       
               jlconsseriadanum Para JLabel  
   jlstatus Para JLabel 
               jtnombremateria Para JTextField
               jtseriadanum Para JTextField      
               jtconsseriadanum Para JTextField 
               jchBstatus JCheckBox 
   jbguardar para JButton

Si se crea la interfaz  desde NetBeans tomar en cuenta que la ventana y su JPanel debera tener un SetLayout=Null:
  en MateriaFrm.java


(Con mouse derecho sobre la ventana y sobre JPanel)




ACTIVIDAD 
Se parte de un proyecto en java  nombrado CentraUsuario y que ya contiene una ventana de inicio siguiente(la clase Inicio.java):
import images.*;
import javax.swing.ImageIcon;
import javax.swing.*;

public class Inicio extends javax.swing.JFrame {
private  JPanel jp;
    public Inicio() {
      jp= new JPanel();
       jp.setLayout(null);
        initComponents();     
                //Establecer el fondo
        getContentPane().add(jp);
        setSize(1200,700);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //Finaliza la App
        setTitle("Mis calificaciones");
    }

    private void initComponents() {
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu3 = new javax.swing.JMenu();
        mnuCatalogo = new javax.swing.JMenu();
        mnuIMateria = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        mnuIPersona = new javax.swing.JMenuItem();
        mnuCalificacion = new javax.swing.JMenu();
        mnuIRegistraCalif = new javax.swing.JMenuItem();
        mnuSalir = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);
        jMenu3.setText("Inicio");
        jMenuBar1.add(jMenu3);
        mnuCatalogo.setText("Catalogos");
        mnuIMateria.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M, java.awt.event.InputEvent.CTRL_MASK));
        mnuIMateria.setText("Materias");
        mnuIMateria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuIMateriaActionPerformed(evt);
            }
        });
        mnuCatalogo.add(mnuIMateria);
        mnuCatalogo.add(jSeparator1);
        mnuIPersona.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
        mnuIPersona.setText("Personas");
        mnuIPersona.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuIPersonaActionPerformed(evt);
            }
        });
        mnuCatalogo.add(mnuIPersona);
        jMenuBar1.add(mnuCatalogo);
        mnuCalificacion.setText("Calificaciones");
        mnuIRegistraCalif.setText("Registrar");
        mnuIRegistraCalif.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuIRegistraCActionPerformed(evt);
            }
        });
        mnuCalificacion.add(mnuIRegistraCalif);
        jMenuBar1.add(mnuCalificacion);
        mnuSalir.setText("Salir");
        mnuSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuSalirActionPerformed(evt);
            }
        });

        jMenuItem1.setText("Salir");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        mnuSalir.add(jMenuItem1);
        jMenuBar1.add(mnuSalir);
        setJMenuBar(jMenuBar1);
        setBounds(0, 0, 655, 518);
    }

    private void mnuIMateriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuIMateriaActionPerformed
      //Descomentar  new MateriaFrm().setVisible(true);
    }
 
    private void mnuIRegistraCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuIMateriaActionPerformed
      //Descomentar  new CalificaFrm().setVisible(true);
    }
 
    private void mnuIPersonaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuIPersonaActionPerformed
    }
    private void mnuSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuSalirActionPerformed
    }
    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
        System.exit(0);
    }
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JMenu mnuCalificacion;
    private javax.swing.JMenu mnuCatalogo;
    private javax.swing.JMenuItem mnuIMateria;
    private javax.swing.JMenuItem mnuIPersona;
    private javax.swing.JMenuItem mnuIRegistraCalif;
    private javax.swing.JMenu mnuSalir;
}



1.-Crear la BASE DE DATOS en MySql:
   1.1   Crear un script en  materias2017.sql y capturar lo siguiente
(Usar un block de notas)
create database calificaciones;
use calificaciones;

create table materia(
clavemate integer NOT NULL AUTO_INCREMENT UNIQUE,
nombremateria varchar(40),
seriadanum integer,
consseriadanum integer,
status boolean,
fechaalta datetime,
constraint clave_1 PRIMARY KEY(clavemate)
);

create table califica(
clavecalifica integer NOT NULL AUTO_INCREMENT UNIQUE,
clavemat integer,
cvepersona integer,
calificacion float,
descripcion varchar(40),
fechacalif datetime,
status integer,
ciclo varchar(10),
constraint clave_1 PRIMARY KEY(clavecalifica)
);

create table persona(
cvepersona integer NOT NULL AUTO_INCREMENT UNIQUE,
nombre varchar(40),
apepat varchar(40),
apemat varchar(40),
edad integer,
fechaalta datetime,
status smallint,
constraint clave_1 PRIMARY KEY(cvepersona)
);

   1.2   Entrar en modo consola y correr el script anterior
mysql> \. materias2017.sql

2.- Copiar el driver en un nuevo proyecto en java "CentraUsuario" :

2.1 Crear la carpeta lib dentro del proyecto y pegar el archivo  
          
mysql-connector-java-5.1.40-bin.jar



 2.2 Agregar la referencia al driver desde el proyecto
- Si es en NetBeans:



- Si es en JCreator:

  

3.- Utilizar el proyecto CentraUsuario
Agregar la clase Conexion.java que contiene la conexión a la base de datos:
package centrausuario;
import javax.swing.*;
import java.sql.*;
public class Conexion {   
                private Connection con = null;   
                public Connection getConexion() throws SQLException{
//                **********Conexion a MySQL    **************
                String driver = "com.mysql.jdbc.Driver";
                String url = "jdbc:mysql://localhost/calificaciones";    //calificaciones es la base de datos
                                String user = "root";  
                                String password="Mysql";                                

                try{
                                  Class.forName(driver);
                                  con = DriverManager.getConnection(url,user,password);
                                }catch(ClassNotFoundException ex){
                                   JOptionPane.showMessageDialog(null,"No se encontro el driver jdbc instalado en el sistema!\n\n"+ex.getMessage(),"Error de conexion",JOptionPane.ERROR_MESSAGE);                                     
                }
                                return con;
                }
}

4.- Agregar la clase MateriaVo.java que contiene la entidad Materia 

package centrausuario;
import java.util.Date;

public class MateriaVo {
private int clavemate;
private String nombremateria;
private int seriadanum;
private int consseriadanum;
private boolean status;
private Date fechaalta;
}

  4.2.- Generar sus get y set en el menu
               - Refactor + Encapsulate Fields
                - Seleccionafr todos los get y set de la tabla
                - Presionar Refactor

La clase quedara asi:

  package centrausuario;
  import java.util.Date;

  public class MateriaVo {
    private int clavemate;
    private String nombremateria;
    private int seriadanum;
    private int consseriadanum;
    private boolean status;
    private Date fechaalta;

    public int getClavemate() {
        return clavemate;
    }
    public void setClavemate(int clavemate) {
        this.clavemate = clavemate;
    }
    public String getNombremateria() {
        return nombremateria;
    }
    public void setNombremateria(String nombremateria) {
        this.nombremateria = nombremateria;
    }
    public int getSeriadanum() {
        return seriadanum;
    }
    public void setSeriadanum(int seriadanum) {
        this.seriadanum = seriadanum;
    }
    public int getConsseriadanum() {
        return consseriadanum;
    }
    public void setConsseriadanum(int consseriadanum) {
        this.consseriadanum = consseriadanum;
    }
    public boolean isStatus() {
        return status;
    }
    public void setStatus(boolean status) {
        this.status = status;
    }
    public Date getFechaalta() {
        return fechaalta;
    }
    public void setFechaalta(Date fechaalta) {
        this.fechaalta = fechaalta;
    } 
 }

5.- Agregar la clase MateriaDAO.java que contiene los movimientos de Materia a la Base de Datos

package centrausuario;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import javax.swing.*;
import java.util.Date;

public class MateriaDAO {
   
  Conexion ObjConecta = new Conexion();
  Connection miConexion=null;   // Canal de conexion
  ResultSet miTabla=null;   //Guarda informacin de las columnas(campos)
  Statement miInstruccion=null; //Ejecuta sentencias SQL sin parmetros
  PreparedStatement  miInstruccionPrep=null;  //Ejecuta sentencias SQL con parmetros de entrada
  int miResultado;

  public MateriaDAO() {
      try{
                miConexion=ObjConecta.getConexion();
      }catch(Exception ex){
          JOptionPane.showMessageDialog(null,"No se conecto a la Base de Datos: " + ex.getMessage(),"ERROR DE CONEXION",JOptionPane.ERROR_MESSAGE);     
      }
  }
 
  public void Alta(MateriaVo ObjMat){
                try{
                                String miInsercion="Insert into materia(nombremateria,seriadanum,consseriadanum,fechaalta,status) values(?,?,?,?,?)";
                                miInstruccionPrep= miConexion.prepareStatement(miInsercion);
                miInstruccionPrep.setString(1,ObjMat.getNombremateria());
                miInstruccionPrep.setInt(2,ObjMat.getSeriadanum());
                                miInstruccionPrep.setInt(3,ObjMat.getConsseriadanum());
               
                Calendar currenttime = Calendar.getInstance();
                java.sql.Date dtFec = new java.sql.Date(currenttime.getTimeInMillis());//  System.currentTimeMillis());
                miInstruccionPrep.setDate(4,dtFec);
                                miInstruccionPrep.setBoolean(5,ObjMat.isStatus());
                                miInstruccionPrep.executeUpdate();
                               
                }catch(SQLException ex){
                                JOptionPane.showMessageDialog(null,"No se encontro el Driver jdbc instalado" + ex.getMessage(),"ERROR DE CONEXION",JOptionPane.ERROR_MESSAGE);
    }
  }
}

6.- Crear el formulario  MateriaFrm.java, agregar y acomodar
      los componentes de acuerdo a tu prototipo
      (utilizar el de la practica 001)
    Ejemplo:
        6.1 Primero se declaran los componentes
   private JLabel jlnombremateria;
               private JLabel jlseriadanum;       
               private JLabel jlconsseriadanum;  
               private JLabel jlstatus; 
               private JTextField jtnombremateria;
               private JTextField jtseriadanum;       
               private JTextField jtconsseriadanum;  
               private  JCheckBox jchBstatus; 

       6.2 Inicializar los componentes
           jlnombremateria =new JLabel("Materia:");
           jlseriadanum =new JLabel("Serie:") ;
           jlconsseriadanum =new JLabel ("Consecutivo:");  
           jlstatus=new JLabel ("Estatus:");
           jtnombremateria=new JTextField();
           jtseriadanum=new JTextField();       
           jtconsseriadanum=new JTextField();  
           jchBstatus=new JCheckBox();   
  

      6.3 Agregar el fondo que se diseño

6.3.1 Agregar una imagen de fondo fondo.png en la carpeta images

6.3.2 Agregar la clase ImagenPanel.java en la carpeta images
package centrausuario.images;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

public class ImagenPanel extends JPanel {
     private Image img;
   

     public ImagenPanel(Image imag){
                this.img=imag;
                Dimension dimension = new Dimension(img.getWidth(null), img.getHeight(null));
                this.setPreferredSize(dimension);
                this.setMaximumSize(dimension);
                this.setMinimumSize(dimension);
                this.setSize(dimension);
                this.setLayout(null);   

    }
    @Override
    protected void paintComponent(Graphics g){
        g.drawImage(img, 0, 0, this);
   }  
}



        6.3.3 En la clase MateriaFrm.java sustituir el JPanel contenedor por el que tendra la imagen de fondo
 
a) Quitar:
private JPanel jp; 
jp=new JPanel();
jp.setLayout(null);
 
b) Agregar en el metodo initComponents():

        //Establecer el fondo y enviar la imagen fondo.png
        ImageIcon miImg= new   ImageIcon(getClass().getResource("images/fondo.png"));      
        ImagenPanel jp = new ImagenPanel(miImg.getImage()); 



NOTA:(si tienes problemas para ubicar el fondo )





6.4  En el metodo initComponents() de la clase MateriaFrm.java
agregar los componentes inicializados en la etiqueta contenedora
            Recuerda que los cuatro valores de setBounds indican (x,y,ancho,alto)
                jlnombremateria.setBounds(20,200,80,20); 
                jp.add(jlnombremateria);
                jlseriadanum.setBounds(20,230,80,20);
                jp.add(jlseriadanum);
                jlconsseriadanum.setBounds(20,260,80,20);
                jp.add(jlconsseriadanum);
                jlstatus.setBounds(20,290,120,20);
                jp.add(jlstatus);    

       jtnombremateria.setBounds(120,200,120,20);
                jp.add(jtnombremateria);
        jtseriadanum.setBounds(120,230,120,20);
                jp.add(jtseriadanum);      
        jtconsseriadanum.setBounds(120,260,120,20);
                jp.add(jtconsseriadanum);         
        jchBstatus.setBounds(120,290,120,20);
        jchBstatus.setText("Estatus"); 
                jp.add(jchBstatus);                     

OPCIONAL: 
     Si se necesita indicar el estatus con un radio button 
     se agregarian los radio button siguientes:
                // Declarar
private ButtonGroup grpStatus;
                    private JRadioButton jRdActivo;
                    private JRadioButton jRdInactivo;

                //Inicializar en el constructor
grpStatus = new ButtonGroup();
          jRdActivo = new JRadioButton();
          jRdActivo.setText("ACTIVO");
                    jRdActivo.setBounds(120,340,120,20);
                    jRdActivo.setSelected(true);
          grpStatus.add(jRdActivo);           
          jp.add(jRdActivo);
                      
jRdInactivo = new JRadioButton();
          jRdInactivo.setText("INACTIVO");
                    jRdInactivo.setBounds(240,340,120,20);
                    jRdInactivo.setSelected(false);
          grpStatus.add(jRdInactivo);
jp.add(jRdInactivo);

//Agregar en el metodo guardar()
ObjMateria.setStatus(jRdActivo.isSelected());

 7.- Implementar la clase a ActionListener:

7.1.- Agregar el implements:
public class MateriaFrm extends JFrame implements ActionListener

7.2.- Agregar al boton jbguardar la accion:
jbguardar.addActionListener(this);

7.3.- Agregar el metodo guardar():

  public void guardar(){
        MateriaVo  ObjMateria = new MateriaVo();
        ObjMateria.setNombremateria(jtnombremateria.getText());
        ObjMateria.setSeriadanum(Integer.parseInt(jtseriadanum.getText()));
        ObjMateria.setConsseriadanum(Integer.parseInt(jtconsseriadanum.getText()));
        ObjMateria.setStatus(jchBstatus.isSelected());

        MateriaDAO ObjDAO=new MateriaDAO();
        ObjDAO.Alta(ObjMateria); 
    }

7.4.- Agregar el metodo actionPerformed para ejecitar el metodo guardar()

    public void actionPerformed (ActionEvent e)    {              
           if (e.getSource()== jbguardar){ 
                                guardar();                                                           
           }    
     }



Nota: Verificar las librerias a utilizar:
import centrausuario.images.ImagenPanel;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

7.- Agregar un icono al formulario
7.1 Agregar una imagen para el icono icono.png en la carpeta images
7.2 Agregar la siguiente linea en el metodo initComponents()
setIconImage(getToolkit().getImage(getClass().getResource("images/icono.png")));   




La distribucion de las clases del proyecto queda asi:





8.- Compilar y Ejecutar

9.- Hacer las clases respectivas para personas y calificaciones



--------------------------0--0-----------------------------------

----------------------000- -000--------------------------------

No hay comentarios.:

Publicar un comentario