Agenda Telefónica con Archivo CSV

@Autor: Prof. Luis Mitre

Esta Practica es una Agenda Telefónica que almacena la información en un archivo CSV

Paso 1. Creamos un nuevo Proyecto java dando Click en File-New-Java Proyect en Eclipse.

Paso 2. Creamos los Paquetes Modelo, Vista y Controlador en el Proyecto creado.

Iniciaremos creando la parte visual de nuestro Proyecto.

Paso 3. Creamos la Clase PanelLogin  en el paquete de vista en la cual Extenderemos (Heradaremos) dela Clase JPanel para que la clase se comporte como un contenedor quedando:

public class PanelLogin extends JPanel{
}

Paso 4: ahora creamos los componentes que necesitaremos en esta ventana, considerando que en esta ventana incluiremos un nuevo componente para el uso de las contraseñas..

        JLabel lblUsuario=new JLabel("Usuario:");
	JLabel lblPass=new JLabel("Constraseña");
	public JTextField txtUsuario=new JTextField();
	public JPasswordField txtPass=new JPasswordField();
	public JButton btnLogin=new JButton("LOGIN");

Paso 5: Creamos el Constructor de la clase para empezar a armar nuestra ventana asignando el sistema de ordenamiento a travez de setLayout(null), que indica que usaremos coordenadas:

public PanelLogin(){
		setLayout(null);
		lblUsuario.setBounds(150,200,100,30);
		lblUsuario.setForeground(new Color(255,0,0));
		lblUsuario.setFont(new Font("Arial", 1,20));
		lblPass.setBounds(120,240,140,30);
		lblPass.setForeground(new Color(255,0,0));
		lblPass.setFont(new Font("Arial", 1,20));
		txtUsuario.setBounds(250,200,100,30);
		txtPass.setBounds(250,240,100,30);
		btnLogin.setBounds(200,290,100,30);
		add(lblUsuario);
		add(lblPass);
		add(txtUsuario);
		add(txtPass);
		add(btnLogin);
	}

La ventana se vera Asi, una vez ya corriendo el programa:

agenda1

Paso 6:  Ahora creamos la clase PanelAltas, usando el mismo procedimiento:

  1. Creamos los objetos necesarios
  2. Creamos el constructor y agregamos coordenadas
  3. agregamos los componentes al contenedor.
public class PanelAltas extends JPanel{
	public JLabel lblTitulo=new JLabel("ALTAS");
	public JLabel lblNombre=new JLabel("Nombre");
	public JLabel lblApellido=new JLabel("Apellido");
	public JLabel lblTelefono=new JLabel("Telefono");
	public JLabel lblCorreo=new JLabel("Correo");
	public JLabel lblFace=new JLabel("Facebook");
	public JLabel lblTwitter=new JLabel("Twitter");
	public JLabel lblInstagram=new JLabel("Instagram");
	public JTextField txtNombre=new JTextField();
	public JTextField txtApellido=new JTextField();
	public JTextField txtTelefono=new JTextField();
	public JTextField txtCorreo=new JTextField();
	public JTextField txtFacebook=new JTextField();
	public JTextField txtTwitter=new JTextField();
	public JTextField txtInstagram=new JTextField();
	public JButton btnCancelar=new JButton("Cancelar");
	public JButton btnGrabar=new JButton("Grabar");
	public JLabel lblFoto=new JLabel("Foto Aqui");
	Border marco = BorderFactory.createLineBorder(Color.BLUE, 5);
	public ImageIcon foto;
	
	public PanelAltas(){
		setLayout(null);
		lblTitulo.setBounds(200,20,100,50);
		lblTitulo.setFont(new Font("Arial", 1, 25));
		lblFoto.setBorder(marco);
		lblFoto.setHorizontalAlignment(JLabel.CENTER);
		lblFoto.setBounds(230,80,200,200);
		
		lblNombre.setBounds(30,80,80,30);
		lblApellido.setBounds(30,120,80,30);
		lblTelefono.setBounds(30,160,80,30);
		lblCorreo.setBounds(30,200,80,30);
		lblFace.setBounds(30,240,80,30);
		lblTwitter.setBounds(30,280,80,30);
		lblInstagram.setBounds(30,320,80,30);
		txtNombre.setBounds(110,80,100,30);
		txtApellido.setBounds(110,120,100,30);
		txtTelefono.setBounds(110,160,100,30);
		txtCorreo.setBounds(110,200,100,30);
		txtFacebook.setBounds(110,240,100,30);
		txtTwitter.setBounds(110,280,100,30);
		txtInstagram.setBounds(110,320,100,30);
		btnCancelar.setBounds(75,370,100,50);
		btnGrabar.setBounds(225,370,100,50);
		add(lblTitulo);
		add(lblNombre);
		add(lblApellido);
		add(lblTelefono);
		add(lblCorreo);
		add(lblFace);
		add(lblTwitter);
		add(lblInstagram);
		add(txtNombre);
		add(txtApellido);
		add(txtTelefono);
		add(txtFacebook);
		add(txtCorreo);
		add(txtTwitter);
		add(txtInstagram);
		add(btnCancelar);
		add(btnGrabar);
		add(lblFoto);
		
	}
}

La ventana se vera de la siguiente manera:

agenda2

Paso 7: Ahora creamos la Clase PanelBajas que al igual que la clase altas realizamos el mismo procedimiento.

nota: En esta clase agregamos un nuevo elemento que es el botón para buscar..

public class PanelBajas extends JPanel {
	public JLabel lblTitulo=new JLabel("BAJAS");
	public JLabel lblNombre=new JLabel("Nombre");
	public JLabel lblApellido=new JLabel("Apellido");
	public JLabel lblTelefono=new JLabel("Telefono");
	public JLabel lblCorreo=new JLabel("Correo");
	public JLabel lblFace=new JLabel("Facebook");
	public JLabel lblTwitter=new JLabel("Twitter");
	public JLabel lblInstagram=new JLabel("Instagram");
	public JTextField txtNombre=new JTextField();
	public JTextField txtApellido=new JTextField();
	public JTextField txtTelefono=new JTextField();
	public JTextField txtCorreo=new JTextField();
	public JTextField txtFacebook=new JTextField();
	public JTextField txtTwitter=new JTextField();
	public JTextField txtInstagram=new JTextField();
	public JButton btnCancelar=new JButton("Cancelar");
	public JButton btnGrabar=new JButton("Eliminar");
	public JButton btnBuscar=new JButton("Buscar");
	public JLabel lblFoto=new JLabel("Foto Aqui");
	Border marco = BorderFactory.createLineBorder(Color.BLUE, 5);
	public ImageIcon foto;
	
	public PanelBajas(){
		btnGrabar.setEnabled(false);
		setLayout(null);
		lblTitulo.setBounds(200,20,100,50);
		lblTitulo.setFont(new Font("Arial", 1, 25));
		lblFoto.setBorder(marco);
		lblFoto.setHorizontalAlignment(JLabel.CENTER);
		lblFoto.setBounds(230,130,200,200);
		
		lblTelefono.setBounds(30,80,80,30);
		txtTelefono.setBounds(110,80,100,30);
		btnBuscar.setBounds(240,80,100,30);
		
		
		lblNombre.setBounds(30,120,80,30);
		lblApellido.setBounds(30,160,80,30);		
		lblCorreo.setBounds(30,200,80,30);
		lblFace.setBounds(30,240,80,30);
		lblTwitter.setBounds(30,280,80,30);
		lblInstagram.setBounds(30,320,80,30);
		
		txtNombre.setBounds(110,120,100,30);
		txtApellido.setBounds(110,160,100,30);		
		txtCorreo.setBounds(110,200,100,30);
		txtFacebook.setBounds(110,240,100,30);
		txtTwitter.setBounds(110,280,100,30);
		txtInstagram.setBounds(110,320,100,30);
		btnCancelar.setBounds(75,370,100,50);
		btnGrabar.setBounds(225,370,100,50);
		txtNombre.setEditable(false);
		txtApellido.setEditable(false);
		txtCorreo.setEditable(false);
		txtFacebook.setEditable(false);
		txtTwitter.setEditable(false);
		txtInstagram.setEditable(false);
		add(lblTitulo);
		add(lblNombre);
		add(lblApellido);
		add(lblTelefono);
		add(lblCorreo);
		add(lblFace);
		add(lblTwitter);
		add(lblInstagram);
		add(txtNombre);
		add(txtApellido);
		add(txtTelefono);
		add(txtFacebook);
		add(txtCorreo);
		add(txtTwitter);
		add(txtInstagram);
		add(btnCancelar);
		add(btnGrabar);
		add(lblFoto);
		add(btnBuscar);
		
	}
}

La ventana se vera Asi:

agenda3

Paso 8: Continuamos con la Clase PanelCambios:

public class PanelCambios extends JPanel {
	public JLabel lblTitulo=new JLabel("CAMBIOS");
	public JLabel lblNombre=new JLabel("Nombre");
	public JLabel lblApellido=new JLabel("Apellido");
	public JLabel lblTelefono=new JLabel("Telefono");
	public JLabel lblCorreo=new JLabel("Correo");
	public JLabel lblFace=new JLabel("Facebook");
	public JLabel lblTwitter=new JLabel("Twitter");
	public JLabel lblInstagram=new JLabel("Instagram");
	public JTextField txtNombre=new JTextField();
	public JTextField txtApellido=new JTextField();
	public JTextField txtTelefono=new JTextField();
	public JTextField txtCorreo=new JTextField();
	public JTextField txtFacebook=new JTextField();
	public JTextField txtTwitter=new JTextField();
	public JTextField txtInstagram=new JTextField();
	public JButton btnCancelar=new JButton("Cancelar");
	public JButton btnGrabar=new JButton("Grabar");
	public JButton btnBuscar=new JButton("Buscar");
	public JLabel lblFoto=new JLabel("Foto Aqui");
	Border marco = BorderFactory.createLineBorder(Color.BLUE, 5);
	public ImageIcon foto;
	
	public PanelCambios(){
		setLayout(null);
		lblTitulo.setBounds(180,20,200,50);
		lblTitulo.setFont(new Font("Arial", 1, 25));
		lblFoto.setBorder(marco);
		lblFoto.setHorizontalAlignment(JLabel.CENTER);
		lblFoto.setBounds(230,130,200,200);
		
		lblTelefono.setBounds(30,80,80,30);
		txtTelefono.setBounds(110,80,100,30);
		btnBuscar.setBounds(240,80,100,30);
		
		
		lblNombre.setBounds(30,120,80,30);
		lblApellido.setBounds(30,160,80,30);		
		lblCorreo.setBounds(30,200,80,30);
		lblFace.setBounds(30,240,80,30);
		lblTwitter.setBounds(30,280,80,30);
		lblInstagram.setBounds(30,320,80,30);
		
		txtNombre.setBounds(110,120,100,30);
		txtApellido.setBounds(110,160,100,30);		
		txtCorreo.setBounds(110,200,100,30);
		txtFacebook.setBounds(110,240,100,30);
		txtTwitter.setBounds(110,280,100,30);
		txtInstagram.setBounds(110,320,100,30);
		btnCancelar.setBounds(75,370,100,50);
		btnGrabar.setBounds(225,370,100,50);
		add(lblTitulo);
		add(lblNombre);
		add(lblApellido);
		add(lblTelefono);
		add(lblCorreo);
		add(lblFace);
		add(lblTwitter);
		add(lblInstagram);
		add(txtNombre);
		add(txtApellido);
		add(txtTelefono);
		add(txtFacebook);
		add(txtCorreo);
		add(txtTwitter);
		add(txtInstagram);
		add(btnCancelar);
		add(btnGrabar);
		add(lblFoto);
		add(btnBuscar);
		
	}
}

La Ventana se Vera Asi:

agenda4

Paso 9: Ahora la clase PanelConsultas:

public class PanelConsultas extends JPanel {
	public JLabel lblTitulo = new JLabel("CONSULTAS");
	public JLabel lblTelefono = new JLabel("Telefono");
	public JTextField txtTelefono = new JTextField();
	public JTable tabla=new JTable();
	public JScrollPane jsp;
	public DefaultTableModel modeloTabla;
	

	public PanelConsultas() {
		setLayout(null);
		
		
		modeloTabla=new DefaultTableModel(){
			public boolean isCellEditable(int fila, int columna){
				return false;
			}
		};
		modeloTabla.addColumn("Nombre:");
		modeloTabla.addColumn("Apellido:");
		modeloTabla.addColumn("Telefono:");
		modeloTabla.addColumn("Correo:");
		modeloTabla.addColumn("Facebook");
		modeloTabla.addColumn("Twitter");
		modeloTabla.addColumn("Instagram");
		
		tabla=new JTable(modeloTabla);
		jsp=new JScrollPane(tabla);
		jsp.setViewportView(tabla);
		lblTitulo.setBounds(160, 20, 200, 50);
		lblTitulo.setFont(new Font("Arial", 1, 25));
		lblTelefono.setBounds(30,80,80,30);
		txtTelefono.setBounds(110,80,100,30);
		jsp.setBounds(30,120,420,300);
		
		
		add(lblTitulo);
		add(lblTelefono);
		add(txtTelefono);
		add(jsp);
		
	}
}

La ventana se vera asi:

agenda5

Paso 10: Ahora crearemos la Clase VentanaPrincipal que Heredara de la clase JFrame que sera nuestra ventana en donde insertaremos todas las anteriores es decir sera la plataforma donde correra nuestro programa:

Nota: Dentro de esta clase insertamos la imagen de fondo del panel login, dentro de este codigo hay anotaciones donde inicia el codigo para este fin..

public class VentanaPrincipal extends JFrame{
	public PanelLogin panelLogin;
	public PanelAltas panelAltas=new PanelAltas();
	public PanelBajas panelBajas=new PanelBajas();
	public PanelCambios panelCambios=new PanelCambios();
	public PanelConsultas panelConsultas=new PanelConsultas();
	
	public JMenuBar barraMenu=new JMenuBar();
	public JMenu mnAdministracion=new JMenu("Administracion");
	public JMenu mnAgenda=new JMenu("Agenda");
	public JMenu mnUsuarios=new JMenu("Agenda");
	public JMenuItem mnNuevoUser=new JMenuItem("Nuevo Usuario");
	public JMenuItem mnEliminarUser=new JMenuItem("Eliminar Usuario");
	public JMenu mnSesion=new JMenu("Sesion");
	public JMenuItem mnCerrarSesion=new JMenuItem("Cerrar Sesion");
	public JMenuItem mnAltas=new JMenuItem("Altas");
	public JMenuItem mnBajas=new JMenuItem("Bajas");
	public JMenuItem mnCambios=new JMenuItem("Cambios");
	public JMenuItem mnConsultas=new JMenuItem("Consultas");
	
	public JTabbedPane pestanas=new JTabbedPane(); 
	public JPanel panelCarta=new JPanel();
	public CardLayout cartas=new CardLayout();
	Image imagen;
	public VentanaPrincipal(){
		setLayout(new BorderLayout());
		pestanas.insertTab("Altas",null,panelAltas,"Altas",0);
		pestanas.insertTab("Bajas",null,panelBajas,"Bajas",1);
		pestanas.insertTab("Cambios",null,panelCambios,"Cambios",2);
		pestanas.insertTab("Consultas",null,panelConsultas,"Consultas",3);
		
		setJMenuBar(barraMenu);
		barraMenu.add(mnAdministracion);
		barraMenu.add(mnAgenda);
		
		mnUsuarios.add(mnNuevoUser);
		mnUsuarios.add(mnEliminarUser);
		mnSesion.add(mnCerrarSesion);
		
		mnAdministracion.add(mnUsuarios);
		mnAdministracion.add(mnSesion);
		
		mnAgenda.add(mnAltas);
		mnAgenda.add(mnBajas);
		mnAgenda.add(mnCambios);
		mnAgenda.add(mnConsultas);
		
		
		barraMenu.setVisible(false);
		mnAgenda.setEnabled(false);
		mnUsuarios.setEnabled(false);
		
                /**
                * el codigo de a continuacion sirve para
                * insertar una imagen de fondo,
                * en este caso es el panel login
                **/ 
		panelLogin=new PanelLogin(){
			public void paintComponent(Graphics g){
				g.drawImage(imagen,0,0,
					this.getWidth(),
					this.getHeight(),null);
			}
		};
		imagen=new ImageIcon("./imagenes/sepiente.jpg").getImage();
		repaint();
                //fin del codigo de la imagen
		panelCarta.setLayout(cartas);
		panelCarta.add(panelLogin,"login");
		panelCarta.add(pestanas,"todo");
		
		
		
		add(panelCarta,BorderLayout.CENTER);
		setSize(500,530);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

Con esto hemos terminado por ahora la Parte Gráfica de nuestro sistema, a partir de este momento si creamos una clase auxiliar y creamos un objeto de la clase VentanaPrincipal miraremos nuestro programa corriendo, cabe mencionar que no tendrá todavía ninguna acción.

Ahora sera necesarios descargar el archivo que se encuentra en el siguiente link: https://sourceforge.net/projects/javacsv/

del cual descargaremos un Archivo Comprimido y Abriremos de preferencia con Winrar

archivo

una vez abierto el archivo extraemos el archivo llamado javacsv.jar en cualquier lugar de nuestra maquina de preferencia dentro de la carpeta de trabajo de java

descomp

una vez que tengamos el archivo daremos clic derecho en el nombre del proyecto de java elegimos Configurar BuildPath-Configure BuildPath:

build

se abrirá una ventana en la cual elegimos la pestaña Libraries y elegimos el botón Add External Jar’s y seleccionamos el archivo que descomprimimos y damos OK.

build2

Ahora ya estamos Listo para continuar….

Paso 11: Ahora crearemos la clase Contactos dentro del paquete modelo la cual será necesario para crear objetos por cada contacto que utilizaremos, quedando de la siguiente manera:

public class Contactos {
	public String nombre;
	public String apellido;
	public String telefono;
	public String correo;
	public String facebook;
	public String twitter;
	public String instagram;
	public String foto;
	public Contactos() {

	}
	public Contactos(String nombre, String apellido, 
			String telefono, String correo, 
			String facebook, String twitter, 
			String instagram,String foto) {
		this.nombre=nombre;
		this.apellido=apellido;
		this.telefono=telefono;
		this.correo=correo;
		this.facebook=facebook;
		this.twitter=twitter;
		this.instagram=instagram;
		this.foto=foto;
	}
	public void setNombre(String nombre){
		this.nombre=nombre;
	}
	public String getNombre(){
		return nombre;
	}
	public void setApellido(String apellido){
		this.apellido=apellido;
		
	}
	public void setTelefono(String telefono){
		this.telefono=telefono;
		
	}
	public void setCorreo(String correo){
		this.correo=correo;
		
	}
	public void setFacebook(String facebook){
		this.facebook=facebook;
		
	}
	public void setTwitter(String twitter){
		this.twitter=twitter;
		
	}
	public void setInstagram(String instagram){
		this.instagram=instagram;
		
	}
	public void setFoto(String foto){
		this.foto=foto;
		
	}
	public String getApellido(){
		return apellido;
	}
	public String getTelefono(){
		return telefono;
	}
	public String getCorreo(){
		return correo;
	}
	public String getFacebook(){
		return facebook;
	}
	public String getTwitter(){
		return twitter;
	}
	public String getInstagram(){
		return instagram;
	}
	public String getFoto(){
		return foto;
	}

}

 

 

Paso 12: De la misma manera que el paso anterior crearemos la clase Usuarios dentro del paquete modelo que hará lo mismo que contactos pero para usuarios:

public class Usuarios {
	public String usuario;
	public String password;
	public String tipo;
	public Usuarios() {	}
	public Usuarios(String usuario, String password, 
			String tipo) {
		this.usuario=usuario;
		this.password=password;
		this.tipo=tipo;
	}
	public String getUsuario(){
		return usuario;
	}
	public void setUsuario(String usuario){
		this.usuario=usuario;
	}
	public String getPassword(){
		return password;
	}
	public void setPassword(String password){
		this.password=password;
	}
	public String getTipo(){
		return tipo;
	}
	public void setTipo(String tipo){
		this.tipo=tipo;
	}
} 

Paso 13: Procederemos a crear nuestra clase MODELO dentro del paquete del mismo nombre que será en el cual pondremos todos los métodos necesarios para poder escribir y leer al archivo de texto CSV.

Paso 14: Crearemos los objetos necesarios para poder trabar en esta clase:

public class Modelo{
        public String nombre;
	public String apellido;
	public String telefono;
	public String correo;
	public String facebook;
	public String twitter;
	public String instagram;
	public String foto;
	public String tipoUsuario = null;
	CsvReader lectura;
	CsvWriter escritura;
	ArrayList<Contactos> contactosLista = new ArrayList<Contactos>();
	ArrayList<Usuarios> usuariosLista = new ArrayList<Usuarios>();

Cabe mencionar que los objetos ArrayList son muy similares a un arreglo la diferencia es que estos almacenaran objetos del tipo Contactos y Usuarios respectivamente.

Paso 14: Crearemos nuestro primer método que se llamara cargar() el cual tiene la función de leer los archivos CSV crear objetos por cada contacto o usuario que encuentre en estos archivos y almacenarlos dentro de sus respectivos arreglos.

public void cargar() {
		//Primero eliminamos todo lo que tenga el array
		//para evitar duplicados..
		usuariosLista.removeAll(usuariosLista);		
		try {
			lectura = new CsvReader("./usuarios.csv");
			while (lectura.readRecord()) {
				usuariosLista.add(new Usuarios(lectura.get(0),                                          lectura.get(1),
						lectura.get(2)));
			}
			lectura.close();			
		contactosLista.removeAll(contactosLista);
			lectura=new CsvReader("./contactos.csv");
			while(lectura.readRecord()){
				contactosLista.add(
					new Contactos(	lectura.get(0), lectura.get(1),
						lectura.get(2),	lectura.get(3),
						lectura.get(4),	lectura.get(5),
						lectura.get(6),	lectura.get(7)));
			}
			lectura.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} }

Nota: estos archivos deberán estar creados dentro de la carpeta del proyecto junto a las carpetas SRC y BIN y su Extencion es .csv

carpeta

Paso 15: ahora para que este método funcione al momento que inicia nuestro programa crearemos un constructor el cual lo mande llamar:

¿Por qué no ponemos el código del método cargar dentro del constructor ¡Mejor! ?

  • Por que este método lo utilizaremos en varias ocasiones y si lo ponemos en el constructor solo se utilizara una vez.
public Modelo() {
		cargar();
	}

Paso 16: ahora crearemos el método login()  que será el encargado de recibir el usuario y la contraseña que el usuario del programa ingrese, y este método verificara que exista dentro de los usuarios y si esto es correcto nos devolverá una valor Verdadero o de lo contrario Falso:

public boolean login(String usuario, String pass) {
		boolean respuesta = false;
		//este ciclo nos permitira buscar todos los usuarios
		for (int x = 0; x < usuariosLista.size(); x++) {
			//Creamos un objeto del tipo usuarios para poder 
			//leer su informacion..
			Usuarios usuarios = usuariosLista.get(x);
			if (usuarios.getUsuario().equals(usuario)
					&& usuarios.getPassword().equals(pass)) {
				respuesta = true;
				tipoUsuario = usuarios.getTipo();
			}
		}

		return respuesta;
	}

Paso 17:  ahora crearemos dos métodos uno llamado actualizar() y el otro actualizarUsuarios(),  los cuales son los encargados de estar escribiendo los cambios a los archivos CSV es decir si agregamos un nuevo contacto se encargara de escribirlo a este archivo o en su defecto llegáramos a eliminar un contacto o usuario estos métodos también lo eliminaran de los archivos..

Quedarían de la siguiente manera:

public void actualizar(){
		try{
		escritura=new CsvWriter("./contactos.csv");
		for(int x=0;x<contactosLista.size();x++){
			Contactos contacto=contactosLista.get(x);
			escritura.write(contacto.getNombre());
			escritura.write(contacto.getApellido());
			escritura.write(contacto.getTelefono());
			escritura.write(contacto.getCorreo());
			escritura.write(contacto.getFacebook());
			escritura.write(contacto.getTwitter());
			escritura.write(contacto.getInstagram());
			escritura.write(contacto.getFoto());
			escritura.endRecord();
		}
		escritura.close();
		}catch(IOException e){
			e.printStackTrace();
		}
		
	}

public void actualizarUsuarios(){
		try{
			escritura=new CsvWriter("./usuarios.csv");
		for(int x=0;x<usuariosLista.size();x++){
			Usuarios user=usuariosLista.get(x);
			escritura.write(user.getUsuario());
			escritura.write(user.getPassword());
			escritura.write(user.getTipo());
			escritura.endRecord();
		}
		escritura.close();	
		}catch(IOException e){
			e.printStackTrace();
		}
	}

Paso 18: lo siguiente sería crear los métodos encargados de recibir la información del programa para sus acciones como Altas, Bajas, Cambios.

Espesamos con Altas:

public void altas(String nombre, String apellido, String telefono,
			String correo, String facebook, String twitter, String intagram,
			String foto) {
		contactosLista.add(new Contactos(nombre, apellido, telefono, correo,
				facebook, twitter, instagram, foto));
		actualizar();
	}

Ahora Bajas:

public void bajas(String telefono){
		for(int x=0; x<contactosLista.size();x++){
			Contactos contacto=contactosLista.get(x);
			if(contacto.getTelefono().equals(telefono));
			contactosLista.remove(x);
			break;
		}
		actualizar();
	}

Y Cambios:

public void cambios(String nombre, String apellido, 
		String telefono, String correo, 
		String facebook, String twitter, 
		String intagram,String foto,String telModificar){
	for(int x=0;x<contactosLista.size();x++){
		Contactos contact=contactosLista.get(x);
		if(contact.getTelefono().equals(telModificar)){
			contact.setNombre(nombre);
			contact.setApellido(apellido);
			contact.setCorreo(correo);
			contact.setFacebook(facebook);
			contact.setTwitter(twitter);
			contact.setInstagram(instagram);
			contact.setFoto(foto);
		}
	}
	actualizar();
}

Paso 19: ahora crearemos un método que nos permitirá buscar a un contacto por su teléfono, este nos servirá para bajas y cambios ya que tendrán esta función:

public boolean buscar(String telefono){
	boolean respuesta=false;
	for(int x=0;x<contactosLista.size();x++){
		Contactos contact=contactosLista.get(x);
		if(contact.getTelefono().equals(telefono)){
		nombre=contact.getNombre();
		apellido=contact.getApellido();
		correo=contact.getCorreo();
		facebook=contact.getFacebook();
		twitter=contact.getTwitter();
		instagram=contact.getInstagram();
		foto=contact.getFoto();
		respuesta=true;
		}
	}
	
	return respuesta;
}

En este método retorna un Verdadero o Falso dependiendo de si lo encontró de ser afirmativa la respuesta almacenara los valores dentro de las variables globales que creamos al principio de la clase Modelo, para poder acceder a estos valores desde la clase controlador:

 

Paso 20: Ahora crearemos el método consultas(), este método a diferencia de los demás devuelve un objeto del tipo DefaultTableModel  que es el necesario para poder construir nuestra tabla que insertamos en la pestaña Consultas de nuestra aplicación. Quedaría de la siguiente manera:

public DefaultTableModel consultas(String telefono){
		/**
		 * creamos un Object que sera el encargado
		 * de almacenar los valores de cada 
		 * contacto y estos se insertaran dentro
		 * de la tabla..
		 */
		Object[] filas=new Object[7];
		//creamos el objeto que devolveremos..
		DefaultTableModel modeloTabla=new DefaultTableModel();
		//asignamos los encabezados de cada columna de la tabla..
		modeloTabla.addColumn("Nombre:");
		modeloTabla.addColumn("Apellido:");
		modeloTabla.addColumn("Telefono:");
		modeloTabla.addColumn("Correo:");
		modeloTabla.addColumn("Facebook:");
		modeloTabla.addColumn("Twitter:");
		modeloTabla.addColumn("Instagram");
		//realizamos la consulta de todos los contactos..
		for(int x=0;x<contactosLista.size();x++){
			//creamos el objeto para acceder a los
			//datos del contacto
			Contactos contact=contactosLista.get(x);
			/**
			 * el metodo indexOf nos permite compara toda
			 * la cadena del telefono con el o los carac
			 * caracteres que recibimos..
			 * esto nos permitira buscar las coincidencias
			 * y poner todos los que coincidan
			 */
			int res=contact.getTelefono().indexOf(telefono);
			if(res!=-1){
				filas[0]=contact.getNombre();
				filas[1]=contact.getApellido();
				filas[2]=contact.getTelefono();
				filas[3]=contact.getCorreo();
				filas[4]=contact.getFacebook();
				filas[5]=contact.getTwitter();
				filas[6]=contact.getInstagram();
				modeloTabla.addRow(filas);
			}
		}
		return modeloTabla;
	}

Nota: como habrás notado he puesto comentarios dentro del código, que en lo particular es más cómodo para que comprendas el código..

 

Paso 21:  ahora crearemos un método llamado buscarFoto(),  que nos permitirá buscar la fotografía del contacto que le daremos Doble  clic dentro de la tabla de búsqueda ya que la imagen no la podemos insertar dentro de esta tabla.. Quedaría la siguiente manera:

public boolean buscarFoto(String telefono){
		boolean respuesta=false;
		for(int x=0;x<contactosLista.size();x++){
			Contactos contact=contactosLista.get(x);
			if(contact.getTelefono().equals(telefono)){
				foto=contact.getFoto();
				respuesta=true;
			}
		}
		return respuesta;
	}

Paso 22: bueno hasta ahorita todo se enfocó en trabajar con los contactos, ya que es lo principal del programa, por lo consiguiente crearemos dos métodos para usuarios uno será el de agregar un nuevo usuario y el otro para eliminarlo, quedando los métodos: nuevoUsuario() y eliminarUsuarios()

public void nuevoUsuario(String usuario,
						String pass, String tipo){
	usuariosLista.add(new Usuarios(usuario,pass,tipo));
	actualizarUsuarios();	
	}
	
public void eliminarUsuario(String user){
		for(int x=0;x<usuariosLista.size();x++){
			Usuarios usuario=usuariosLista.get(x);
			if(usuario.getUsuario().equals(user)){
				usuariosLista.remove(x);
				break;
			}
		}
		actualizarUsuarios();
	}

Bueno con esto hemos terminado la clase modelo, ahora procederemos a crear una clase que nos ayudara con la corrección de la ruta o nombre del archivo que utilizaremos como imagenes

Paso 23: Creamos la Clase CorregirRuta dentro del mismo paquete modelo:

public class CorregirRuta {
	 String ruta, separador, nuevoSeparador; 
	 
	    public CorregirRuta(String laruta, String sep, String nuevoSep)
	    {
	        ruta=laruta;
	        separador=sep;
	        nuevoSeparador=nuevoSep;
	    }
	 
	    public String obtenerRutaCorregidaWindows()
	    {
	         StringTokenizer tokens=new StringTokenizer(ruta, separador);
	         //Para guardar la ruta corregida
	         String rutaCorregida = new String();
	         //Contar los tokens (en este caso las carpetas, contado tambien
	         // el nombre del archivo seleccionado).
	         int noTokens = tokens.countTokens();
	         int i = 1;
	         do
	         {      //Agregar el nuevo separador
	            rutaCorregida += tokens.nextToken()+nuevoSeparador;
	            i++;
	         }while(i<noTokens);
	         //Agregar a la ruta corregida el ultimo token, (nombre del archivo)
	         rutaCorregida += tokens.nextToken();       
	         //Mostrar la ruta corregida en la consola
	        // System.out.println(rutaCorregida+"\n"+noTokens+ " tokens");
	         return rutaCorregida;
	    }
}

Ahora Procederemos a crear la Clase Controlador dentro del paquete del mismo nombre:

Paso 24: Creamos la Clase Controlador y creamos los objetos y variables que utilizaremos

public class Controlador{
        VentanaPrincipal ventana = new VentanaPrincipal();
	Modelo modelo = new Modelo();
	String url = null;
	String foto;
	String usuarioActivo=null;
        String telModificar;

}

Paso 25:  empezamos a asignarle acciones a cada uno de los botones de la interfaz gráfica iniciamos creando el metodo accionesBotones() y con los botones  del Panel Login.

public void accionesBotones(){
ventana.panelLogin.btnLogin.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				String usuario = ventana.panelLogin.txtUsuario.getText();
				String password = ventana.panelLogin.txtPass.getText();
				if (modelo.login(usuario, password)) {
					if (modelo.tipoUsuario.equals("0")) {
						ventana.cartas.show(ventana.panelCarta, "todo");
						ventana.barraMenu.setVisible(true);
						ventana.mnAgenda.setEnabled(true);
						ventana.mnUsuarios.setEnabled(true);
						ventana.pestanas.setEnabledAt(0,true);
						ventana.pestanas.setEnabledAt(1,true);
						ventana.pestanas.setEnabledAt(2,true);
						usuarioActivo=usuario;
					} else {
						ventana.barraMenu.setVisible(true);
						ventana.pestanas.setEnabledAt(0,false);
						ventana.pestanas.setEnabledAt(1,false);
						ventana.pestanas.setEnabledAt(2,false);						
						ventana.pestanas.setSelectedIndex(3);
						ventana.cartas.show(ventana.panelCarta, "todo");
						usuarioActivo=usuario;
					}
				} else {
					JOptionPane.showMessageDialog(null, "Acceso Denegado",
							null, JOptionPane.ERROR_MESSAGE);
					ventana.panelLogin.txtUsuario.setText("");
					ventana.panelLogin.txtPass.setText("");
				}
			}
		});

Paso 26: ahora asignamos acciones a los botones de Cancelar, Grabar y a la Etiqueta Foto de Altas

ventana.panelAltas.btnCancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				ventana.panelAltas.txtNombre.setText("");
				ventana.panelAltas.txtApellido.setText("");
				ventana.panelAltas.txtTelefono.setText("");
				ventana.panelAltas.txtCorreo.setText("");
				ventana.panelAltas.txtFacebook.setText("");
				ventana.panelAltas.txtTwitter.setText("");
				ventana.panelAltas.txtInstagram.setText("");
				ventana.panelAltas.lblFoto.setIcon(null);
			}
		});
ventana.panelAltas.lblFoto.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				JFileChooser eleccion = new JFileChooser();

				int opc;
				opc = eleccion.showOpenDialog(null);
				if (opc == eleccion.APPROVE_OPTION) {
					url = eleccion.getSelectedFile().toString();

					ventana.panelAltas.foto = new ImageIcon(url);
					ventana.panelAltas.lblFoto.setText("");
					ventana.panelAltas.lblFoto.setIcon(ventana.panelAltas.foto);
				}
				CorregirRuta ruta1 = new CorregirRuta(url, "\\", "\\\\");
				foto = ruta1.obtenerRutaCorregidaWindows();

			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}
		});
ventana.panelAltas.btnGrabar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String nombre = ventana.panelAltas.txtNombre.getText();
				String apellido = ventana.panelAltas.txtApellido.getText();
				String telefono = ventana.panelAltas.txtTelefono.getText();
				String correo = ventana.panelAltas.txtCorreo.getText();
				String facebook = ventana.panelAltas.txtFacebook.getText();
				String twitter = ventana.panelAltas.txtTwitter.getText();
				String instagram = ventana.panelAltas.txtInstagram.getText();
				modelo.altas(nombre, apellido, telefono, correo, facebook,
						twitter, instagram, url);
				ventana.panelAltas.txtNombre.setText("");
				ventana.panelAltas.txtApellido.setText("");
				ventana.panelAltas.txtTelefono.setText("");
				ventana.panelAltas.txtCorreo.setText("");
				ventana.panelAltas.txtFacebook.setText("");
				ventana.panelAltas.txtTwitter.setText("");
				ventana.panelAltas.txtInstagram.setText("");
				ventana.panelAltas.lblFoto.setIcon(null);

			}
		});

Paso 27:  Ahora le damos las acciones a los botones de BAJAS que serian los de Cancelar, Buscar, Grabar o Eliminar.

ventana.panelBajas.btnBuscar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				String telefono = ventana.panelBajas.txtTelefono.getText();
				if (modelo.buscar(telefono)) {
					ventana.panelBajas.txtNombre.setText(modelo.nombre);
					ventana.panelBajas.txtApellido.setText(modelo.apellido);
					ventana.panelBajas.txtCorreo.setText(modelo.correo);
					ventana.panelBajas.txtFacebook.setText(modelo.facebook);
					ventana.panelBajas.txtTwitter.setText(modelo.twitter);
					ventana.panelBajas.txtInstagram.setText(modelo.instagram);
					foto = modelo.foto;
					ventana.panelBajas.foto = new ImageIcon(foto);
					ventana.panelBajas.lblFoto.setIcon(ventana.panelBajas.foto);
					ventana.panelBajas.btnGrabar.setEnabled(true);
				} else {
					JOptionPane.showMessageDialog(null,
							"Telefono no Localizado");
					ventana.panelBajas.txtTelefono.setText("");

				}
			}
		});
ventana.panelBajas.btnCancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				ventana.panelBajas.txtNombre.setText("");
				ventana.panelBajas.txtApellido.setText("");
				ventana.panelBajas.txtCorreo.setText("");
				ventana.panelBajas.txtFacebook.setText("");
				ventana.panelBajas.txtTwitter.setText("");
				ventana.panelBajas.txtInstagram.setText("");
				ventana.panelBajas.lblFoto.setIcon(null);
				ventana.panelBajas.txtTelefono.setText("");
				ventana.panelBajas.btnGrabar.setEnabled(false);

			}
		});
ventana.panelBajas.btnGrabar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String telefono = ventana.panelBajas.txtTelefono.getText();
				modelo.bajas(telefono);
				ventana.panelBajas.txtNombre.setText("");
				ventana.panelBajas.txtApellido.setText("");
				ventana.panelBajas.txtCorreo.setText("");
				ventana.panelBajas.txtFacebook.setText("");
				ventana.panelBajas.txtTwitter.setText("");
				ventana.panelBajas.txtInstagram.setText("");
				ventana.panelBajas.lblFoto.setIcon(null);
				ventana.panelBajas.txtTelefono.setText("");
				ventana.panelBajas.btnGrabar.setEnabled(false);

			}
		});

Paso 28: De igual manera hacemos con Cambios los Botones de Buscar, Cancelar, Grabar y la etiqueta de Foto.

ventana.panelCambios.btnBuscar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				String telefono = ventana.panelCambios.txtTelefono.getText();
				if (modelo.buscar(telefono)) {
                                        telcambios=telefono;
					ventana.panelCambios.txtNombre.setText(modelo.nombre);
					ventana.panelCambios.txtApellido.setText(modelo.apellido);
					ventana.panelCambios.txtCorreo.setText(modelo.correo);
					ventana.panelCambios.txtFacebook.setText(modelo.facebook);
					ventana.panelCambios.txtTwitter.setText(modelo.twitter);
					ventana.panelCambios.txtInstagram.setText(modelo.instagram);
					foto = modelo.foto;
					ventana.panelCambios.foto = new ImageIcon(foto);
					ventana.panelCambios.lblFoto
							.setIcon(ventana.panelCambios.foto);
					ventana.panelCambios.btnGrabar.setEnabled(true);
					ventana.panelCambios.txtTelefono.setEditable(false);
				} else {
					JOptionPane.showMessageDialog(null,
							"Telefono no Localizado");
					ventana.panelCambios.txtTelefono.setText("");

				}
			}
		});
ventana.panelCambios.btnCancelar
				.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent arg0) {
						ventana.panelCambios.txtNombre.setText("");
						ventana.panelCambios.txtApellido.setText("");
						ventana.panelCambios.txtCorreo.setText("");
						ventana.panelCambios.txtFacebook.setText("");
						ventana.panelCambios.txtTwitter.setText("");
						ventana.panelCambios.txtInstagram.setText("");
						ventana.panelCambios.lblFoto.setIcon(null);
						ventana.panelCambios.txtTelefono.setText("");
						ventana.panelCambios.btnGrabar.setEnabled(false);
						ventana.panelCambios.txtTelefono.setEditable(true);

					}
				});
ventana.panelCambios.btnGrabar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String telefono = ventana.panelCambios.txtTelefono.getText();
				String nombre = ventana.panelCambios.txtNombre.getText();
				String apellido = ventana.panelCambios.txtApellido.getText();
				String correo = ventana.panelCambios.txtCorreo.getText();
				String facebook = ventana.panelCambios.txtFacebook.getText();
				String twitter = ventana.panelCambios.txtTwitter.getText();
				String instagram = ventana.panelCambios.txtInstagram.getText();

				modelo.cambios(nombre, apellido, correo, telefono, facebook,
						twitter, instagram, foto, telcambios);

				ventana.panelCambios.txtNombre.setText("");
				ventana.panelCambios.txtApellido.setText("");
				ventana.panelCambios.txtCorreo.setText("");
				ventana.panelCambios.txtFacebook.setText("");
				ventana.panelCambios.txtTwitter.setText("");
				ventana.panelCambios.txtInstagram.setText("");
				ventana.panelCambios.lblFoto.setIcon(null);
				ventana.panelCambios.txtTelefono.setText("");
				ventana.panelCambios.btnGrabar.setEnabled(false);
				ventana.panelCambios.txtTelefono.setEditable(true);
				ventana.panelCambios.lblFoto.setIcon(null);

			}
		});
ventana.panelCambios.lblFoto.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				JFileChooser eleccion = new JFileChooser();

				int opc;
				opc = eleccion.showOpenDialog(null);
				if (opc == eleccion.APPROVE_OPTION) {
					url = eleccion.getSelectedFile().toString();

					ventana.panelCambios.foto = new ImageIcon(url);
					ventana.panelCambios.lblFoto.setText("");
					ventana.panelCambios.lblFoto
							.setIcon(ventana.panelCambios.foto);
				}
				CorregirRuta ruta1 = new CorregirRuta(url, "\\", "\\\\");
				foto = ruta1.obtenerRutaCorregidaWindows();

			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}
		});

Paso 29: ahora hacemos lo mismo con los componentes de Consultas, la diferencia es que ahora no tenemos botones, si no que tenemos un JTextField y un JTable a los que les daremos acciones.

ventana.panelConsultas.txtTelefono.addKeyListener(new KeyListener() {

			@Override
			public void keyTyped(KeyEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
				String telefono = ventana.panelConsultas.txtTelefono.getText();

				ventana.panelConsultas.tabla.setModel(modelo
						.consultas(telefono));

			}

			@Override
			public void keyPressed(KeyEvent arg0) {
				// TODO Auto-generated method stub

			}
		});
ventana.panelConsultas.tabla.addMouseListener(new MouseAdapter() {

			public void mousePressed(MouseEvent Mouse_evt) {
				JTable table = (JTable) Mouse_evt.getSource();
				Point point = Mouse_evt.getPoint();
				int row = table.rowAtPoint(point);
				if (Mouse_evt.getClickCount() == 2) {
					String telefono = ventana.panelConsultas.tabla.getValueAt(
							ventana.panelConsultas.tabla.getSelectedRow(), 2)
							.toString();

					if (modelo.buscarFoto(telefono)) {
						foto = modelo.foto;
						ImageIcon imgfoto = new ImageIcon(foto);
						new VentanaFoto(imgfoto);
					}
				}
			}
		});

Paso 30: Ahora le damos las acciones a cada uno de los botones Menu del programa..

ventana.mnNuevoUser.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new VentanaNuevoUsuario();
				
				
			}
		});
ventana.mnEliminarUser.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String usuario=JOptionPane.showInputDialog("Ingresa el Usuario a Eliminar");
				if(usuario.equals(usuarioActivo)){
					JOptionPane.showMessageDialog(null, "Este usuario no se Puede Eliminar \npor que esta Activo");
				}else{					
					int opcion=JOptionPane.showConfirmDialog(null, "Deseas Eliminar a este Usuario?");
					if(opcion==0){
						modelo.eliminarUsuario(usuario);
						usuarioActivo="";
						JOptionPane.showMessageDialog(null, "!!Usuario Eliminado!!");
					}
				}
				
			}
		});
ventana.mnCerrarSesion.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				ventana.cartas.show(ventana.panelCarta, "login");
				ventana.barraMenu.setVisible(false);
				ventana.mnAgenda.setEnabled(false);
				ventana.mnUsuarios.setEnabled(false);
				ventana.panelLogin.txtUsuario.setText("");
				ventana.panelLogin.txtPass.setText("");
				usuarioActivo="";
				modelo.cargar();
			}
		});
ventana.mnAltas.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				ventana.pestanas.setSelectedIndex(0);
			}
		});
ventana.mnBajas.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				ventana.pestanas.setSelectedIndex(1);
			}
		});
ventana.mnCambios.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				ventana.pestanas.setSelectedIndex(2);
			}
		});
ventana.mnConsultas.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				ventana.pestanas.setSelectedIndex(3);
			}
		});

Paso 31: Ahora Crearemos la siguiente Ventana:

agenda6

Que sera la que nos permita crear un nuevo usuario..

package vista;

public class VentanaNuevoUsuario extends JFrame {
	Modelo modelo = new Modelo();
	public JLabel lblTitulo = new JLabel("Nuevo Usuario");
	public JLabel lblUsuario = new JLabel("Usuario:");
	public JLabel lblPassword = new JLabel("Password:");
	public JLabel lblConfPassword = new JLabel("Confirmar Password:");
	public JLabel lblTipo=new JLabel("Tipo de usuario");

	public JTextField txtUsuario = new JTextField();
	public JPasswordField txtPass = new JPasswordField();
	public JPasswordField txtConfPass = new JPasswordField();
	
	public JComboBox cmbtipo=new JComboBox();
	public JButton btnCancelar = new JButton("Cancelar");
	public JButton btnGrabar = new JButton("Grabar");

	public VentanaNuevoUsuario() {
		setTitle("Nuevo Usuario");
		setLayout(null);
		lblTitulo.setBounds(10, 20, 400, 50);
		lblTitulo.setFont(new Font("Arial", 1, 20));
		lblTitulo.setHorizontalAlignment(JLabel.CENTER);
		
		lblUsuario.setBounds(0,80,125,30);
		lblUsuario.setHorizontalAlignment(JLabel.RIGHT);
		lblPassword.setBounds(0,120,125,30);
		lblPassword.setHorizontalAlignment(JLabel.RIGHT);
		lblConfPassword.setBounds(0,160,125,30);
		lblConfPassword.setHorizontalAlignment(JLabel.RIGHT);
		
		txtUsuario.setBounds(130,80,100,30);
		txtPass.setBounds(130,120,100,30);
		txtConfPass.setBounds(130,160,100,30);
		
		btnCancelar.setBounds(250,80,100,30);
		btnGrabar.setBounds(250,120,100,30);
		
		lblTipo.setBounds(0,200,125,30);
		lblTipo.setHorizontalAlignment(JLabel.RIGHT);
		cmbtipo.addItem("Administrador");
		cmbtipo.addItem("Limitado");
		cmbtipo.setBounds(130,200,120,30);
		
		add(lblTitulo);
		add(lblUsuario);
		add(lblPassword);
		add(lblConfPassword);
		add(txtUsuario);
		add(txtPass);
		add(txtConfPass);
		add(btnCancelar);
		add(btnGrabar);
		add(cmbtipo);
		add(lblTipo);
		setSize(400,300);
		setVisible(true);
		
		acciones();
	}
	public void acciones(){
		btnCancelar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				txtUsuario.setText("");
				txtPass.setText("");
				txtConfPass.setText("");
			}
		});
		btnGrabar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				String usuario=txtUsuario.getText();
				String pass=txtPass.getText();
				String confir=txtConfPass.getText();
				String tipo=String.valueOf(cmbtipo.getSelectedIndex());
				if(usuario.equals("")||pass.equals("")||confir.equals("")){
					JOptionPane.showMessageDialog(null, "Favor de llenar todos los campos");
				}else{
					if(pass.equals(confir)){
						modelo.nuevoUsuario(usuario,pass,tipo);
						setVisible(false);						
						
					}else{
						JOptionPane.showMessageDialog(null, "Las contraseñas no Coinciden");
					}
				}
			}
		});
	}

}

Paso 32: crearemos las siguiente clase VentanaFoto, que nos servirá para ver la fotografía del contacto cuando le demos doble clic en la tabla de consultas:

public class VentanaFoto extends JFrame{
	public JLabel lblFoto=new JLabel("Foto Aqui");
	Border marco = BorderFactory.createLineBorder(Color.BLUE, 5);
	public ImageIcon foto;
	Modelo modelo=new Modelo();
	
	public VentanaFoto(ImageIcon foto){
		setLayout(new BorderLayout() );
		lblFoto.setBorder(marco);
		add(lblFoto,BorderLayout.CENTER);
		lblFoto.setIcon(foto);
		setSize(350,350);
		setVisible(true);
	}

}

 

Nota: la clase anterior la crearemos en el paquete vista

Muy Bien!!! hasta aqui hemos terminado solo falta crear nuestra clase Auxiliar dentro de controlador para que podamos iniciar nuestro programa…

public class Auxiliar{
public static void main(String[] args) {
	Controlador objeto= new Controlador();
        objeto.accionesBotones(); 
	}

}

 

 NOTA: Para que se pueda ver la Imagen deberás crear la carpeta Imágenes dentro del proyecto, en la mismo ubicación de las carpetas:

carpeta

El Archivo usuarios.csv tendrás que agregarle tres valores para poder ingresar a la agenda: quedaría.

(usuario,password,tipoUsuario)

Ejemplo:    luis,123,0

@Autor: Prof. Luis Mitre

Contador de visitas y estadísticas
Diseño
;