Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/10/2013, 08:34
JMitsu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Me ayudan con el patrón experto y controladora?

Creo que te refieres al patrón MVC. Modelado - Vista - Control.

Esto es un esquema de 3 capas. La clase o clases controladoras son las que van a recibir la información que le transmita la interfaz gráfica, y esa información se la pasa al Modelo (que es otra clase), para que procese esa información. Una vez obtenida, el controlador actualiza esa información en la interfaz gráfica.

Creamos nuestra POJO:

Código Java:
Ver original
  1. public class Usuario {
  2.   private String nombre;
  3.   private String apellidos;
  4.   private String tipoUsuario;
  5.   private String fechaNacimiento;
  6.  
  7.   public void setNombre(String nombre)
  8.  {
  9.    this.nombre = nombre;
  10.   }
  11.  
  12.   public String getNombre()
  13.   {
  14.     return this.nombre;
  15.   }
  16.  
  17.   // asi con todos las propiedades
  18.  
  19. } // fin clase



Creamos el Modelo:


Código Java:
Ver original
  1. public class RegistrarUsuario {
  2.  
  3.   public boolean registrarUsuario(Usuario usuario)
  4.   {
  5.     // Aqui obtienes los datos del usuario por medio de sus getters
  6.     // luego usas StringDateFormat para formatear fechaNacimiento
  7.     // a tipo Date que reconosca la BD. Luego haces la conexión a la
  8.     // BD e isertas los valores en tu tabla.
  9.     Connection conexion = null;
  10.         DateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); // crea un estilo de formato anio - mes - dia
  11.         java.util.Date fecha = null; // crea objetos tipo util.Date y sql.Date
  12.         java.sql.Date fecha2 = null;
  13.         try {
  14.             fecha = ft.parse(usuario.getFechaNacimiento()); // convierte el string en util.Date
  15.             fecha2 = new java.sql.Date(fecha.getTime()); // convierte el util.Date en sql.Date
  16.         }
  17.         catch(ParseException ex) {
  18.             JOptionPane.showMessageDialog(null,"Debes ingresar una fecha correcta.");
  19.         }
  20.             try {
  21.                 conexion = (Connection) Conexion.getConnection(); // abrimos la conexion
  22.                 // crea una sentencia previa para mandarla a una declaracion preparada (PreparedStatement)
  23.                 String sentencia = "insert into empleado values(?,?,?,?,?,?)";
  24.                 PreparedStatement prepararConsulta = conexion.prepareStatement(sentencia); // prepara la declaracion con la sentencia previa
  25.                 prepararConsulta.setInt(1, 0); // pasa los valores que se van a insertar en la tabla
  26.                 prepararConsulta.setString(2,usuario.getPrimerApellido());
  27.                 prepararConsulta.setString(3,usuario.getSegundoApellido());
  28.                 prepararConsulta.setString(4,usuario.getNombre());
  29.                 prepararConsulta.setString(5,usuario.getTipoUsuario());
  30.                 prepararConsulta.setDate(6,fecha2);
  31.                
  32.                 prepararConsulta.executeUpdate(); // ejecuta la declaracion
  33.                 prepararConsulta.close(); // cierra la conexion de la declaracioN
  34.                 JOptionPane.showMessageDialog(null,"Datos ingresados satisfactoriamente.");
  35.             }
  36.        
  37.         catch(SQLException e) {
  38.             JOptionPane.showMessageDialog(null,e.getMessage().toString());
  39.         }
  40.         catch(NullPointerException np){
  41.                 JOptionPane.showMessageDialog(null,"No se ha podido establecer la conexion.");
  42.         }
  43.         finally{
  44.                 conexion.close();
  45.         }
  46.    }
  47.  
  48. } // fin clase

Creamos la clase Conexion para que le sirva de apoyo al Modelo:

Código Java:
Ver original
  1. package modelo;
  2.  
  3. public class Conexion {
  4.      
  5.     public static Connection getConnection() {
  6.         Connection conexion; // crea un objeto de conexion
  7.         try
  8.         {
  9.             // registra el driver, el servidor, la tabla y el user y contrasenia
  10.             Class.forName("com.mysql.jdbc.Driver");
  11.             String servidor = "jdbc:mysql://localhost/empleados";
  12.             String usuarioDB="root";
  13.             String passwordDB="";
  14.             conexion= DriverManager.getConnection(servidor,usuarioDB,passwordDB); // conexion obtiene todos los datos
  15.         }
  16.         catch(ClassNotFoundException | SQLException ex)
  17.         {
  18.             JOptionPane.showMessageDialog(null,ex.getMessage());
  19.             conexion=null;
  20.         }
  21.         return conexion;
  22.     }
  23. }

Creamos el Controlador:

Código Java:
Ver original
  1. public class Controller implements ActionListener {
  2.  
  3.    private GUI gui;
  4.    private RegistrarUsuario registrar;
  5.  
  6.    public Controller(GUI gui, InsertarUsuario registrar)
  7.    {
  8.        this.gui = gui;
  9.        this.registrar = registrar;
  10.     }
  11.  
  12.    @Override
  13.    public void actionPerformed(ActionEvent e)
  14.     {
  15.        if (e.getSource() == btnRegistrar)
  16.         {
  17.            Usuario usuario = new Usuario();
  18.            usuario.setNombre(txtNombre.getText());
  19.            usuario.setApellidos(txtApellidos.setText());
  20.            String tipoUsuario = cboTipoUsario.getSelectedItem().toString();
  21.            usuario.setTipoUsuario(tipoUsuario);
  22.            usuario.setFechaNacimiento(txtFechaNacimiento.getText());
  23.  
  24.            insertar.registrarUsuario(usuario);
  25.  
  26.          }
  27.        else if(e.getSource() == btnNuevo)
  28.         {
  29.            gui.limpiarCampos();
  30.          }
  31.         else if(e.getSource() == btnSalir)
  32.          {
  33.             System.exit(0);
  34.          }
  35.      }
  36. } // fin actionPerformed
  37.  
  38.  
  39. } // fin clase


Código Java:
Ver original
  1. package vista;
  2.  
  3.  
  4. public class Formulario implements apoyo{
  5.  
  6.    // aqui van todos los controles cono publicos
  7.     public String[] tipos = {"Administrador","Vendedor","Consultor"};
  8.  
  9.    
  10.     public Formulario()
  11.     {
  12.         marco = new JFrame();
  13.         marco.setLayout(new FlowLayout());
  14.         // un solo panel contendra los paneles de los
  15.         // campos de texto y los botones. El panel de
  16.         // los campos estaran en el centro y el panel
  17.         // de los botons estara en el sur
  18.         JPanel panelTitle = new JPanel();
  19.         panelTitle.setPreferredSize(new Dimension(500,400)); // tamanio del panel
  20.         panelTitle.setBorder(BorderFactory.createTitledBorder("Registro de Usuarios")); // title border
  21.         marco.add(getTitle()); // el marco agrega el titulo
  22.         panelTitle.add(getFields()); // agrega el panel de los fields
  23.         panelTitle.add(getButtonsPanel()); // agrega el panel de los botones
  24.         marco.add(panelTitle); // agrega el panel al marco
  25.         marco.pack();
  26.     }
  27.    
  28.     private void config()
  29.     {
  30.         marco.setVisible(true);
  31.         marco.setResizable(false);
  32.         marco.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  33.         marco.setSize(550,550);
  34.     }
  35.    
  36.     // panel que genera el titulo
  37.     private JPanel getTitle(){
  38.         JPanel panel = new JPanel();
  39.         panel.setLayout(new FlowLayout(FlowLayout.CENTER));
  40.         panel.setBorder(new EmptyBorder(20,0,30,0));
  41.         JLabel lbl = new JLabel("REGISTRO DE NUEVOS USUARIOS");
  42.         lbl.setForeground(Color.BLUE);
  43.         lbl.setFont(new Font("",Font.BOLD,28));
  44.         panel.add(lbl);
  45.         return panel;
  46.     }
  47.    
  48.     // panel que contiene los fields (labels y txtfields)
  49.     private JPanel getFields()
  50.     {
  51.         JPanel panelfields = new JPanel();
  52.         panelfields.setSize(new Dimension(500,300));
  53.         panelfields.setLayout(new GridLayout(5,2,70,20));
  54.         panelfields.setBorder(new EmptyBorder(40,40,40,40));
  55.    
  56.         lblNombre = new JLabel("NOMBRE:");
  57.         lblNombre.setFont(new Font("Segoei",0,11));
  58.         lblPrimerApellido = new JLabel("PRIMER APELLIDO:");
  59.         lblPrimerApellido.setFont(new Font("",0,11));
  60.         lblSegundoApellido = new JLabel("SEGUNDO APELLIDO:");
  61.         lblSegundoApellido.setFont(new Font("",0,11));
  62.         lblTipoUsuario = new JLabel("TIPO DE USUARIO:");
  63.         lblTipoUsuario.setFont(new Font("",0,11));
  64.         lblFechaNacimiento = new JLabel("FECHA DE NACIMIENTO:");
  65.         lblFechaNacimiento.setFont(new Font("",0,11));
  66.        
  67.         txtNombre = new JTextField("",20);
  68.         txtNombre.setPreferredSize(new Dimension(100,25));
  69.         txtPrimerApellido = new JTextField("",20);
  70.         txtSegundoApellido = new JTextField("",20);
  71.         txtFechaNacimiento = new JTextField("",20);
  72.        
  73.         cboTipoUsuario = new JComboBox(tipos);
  74.        
  75.        
  76.         panelfields.add(lblNombre);
  77.         panelfields.add(txtNombre);
  78.         panelfields.add(lblPrimerApellido);
  79.         panelfields.add(txtPrimerApellido);
  80.         panelfields.add(lblSegundoApellido);
  81.         panelfields.add(txtSegundoApellido);
  82.         panelfields.add(lblTipoUsuario);
  83.         panelfields.add(cboTipoUsuario);
  84.         panelfields.add(lblFechaNacimiento);
  85.         panelfields.add(txtFechaNacimiento);
  86.        
  87.         return panelfields;
  88.     }
  89.    
  90.     // panel que contiene los botones
  91.     private JPanel getButtonsPanel()
  92.     {
  93.         JPanel panelBotones = new JPanel();
  94.         panelBotones.setLayout(new FlowLayout(FlowLayout.LEFT,50,0));
  95.         panelBotones.setBorder(new EmptyBorder(10,40,0,50));
  96.        
  97.         btnNuevo = new JButton("Nuevo");
  98.         btnNuevo.setPreferredSize(new Dimension(100,40));
  99.         btnRegistrar = new JButton("Registrar");
  100.         btnRegistrar.setPreferredSize(new Dimension(100,40));
  101.         btnSalir = new JButton("Salir");
  102.         btnSalir.setPreferredSize(new Dimension(100,40));
  103.        
  104.         panelBotones.add(btnNuevo);
  105.         panelBotones.add(btnRegistrar);
  106.         panelBotones.add(btnSalir);
  107.        
  108.         return panelBotones;
  109.     }
  110.    
  111.     // metodo que asocia la vista con el controlador
  112.     @Override
  113.     public void setControlador(Controller controlador)
  114.     {
  115.         btnNuevo.addActionListener(controlador);
  116.         btnRegistrar.addActionListener(controlador);
  117.         btnSalir.addActionListener(controlador);
  118.     }
  119.  
  120.     // metodo que limpia los fields
  121.     @Override
  122.     public void limpiar() {
  123.         txtNombre.setText("");
  124.         txtPrimerApellido.setText("");
  125.         txtSegundoApellido.setText("");
  126.         cboTipoUsuario.setSelectedIndex(0);
  127.         txtFechaNacimiento.setText("");
  128.         txtNombre.requestFocus();
  129.     }
  130.  
  131.     @Override
  132.     public void arrancar()
  133.     {
  134.        config();    
  135.     }

Última edición por JMitsu; 22/10/2013 a las 08:48