Java Swing Address Book

 

    This java swing project code demonstrate's how to create a simple free address book program using java swing and jdbc. Also you will learn to use the following swing components like Jbuttons, JFrames, JTextFields and Layout Manager (GridBagLayout).



    In short, this is a Simple Address Book that keeps Names, email, Address and Phone Numbers of friends or people. It makes use of the JDBC driver and SQL statements for connecting and manipulating with the database.

 Java swing Addressbook

Java Address Book Source Code

Oct 22, 2006 by Hemanth
 

This Project  Source code consists of 3 files:

AddressBookDemo.java

/*
Name: Hemanth. B
Website: java-swing-tutorial.html

Topic: A basic Java Address Book

Conventions Used in Source code
---------------------------------
	1. All JLabel components start with jlb*
	2. All JPanel components start with jpl*
	3. All JMenu components start with jmenu*
	4. All JMenuItem components start with jmenuItem*
	5. All JDialog components start with jdlg*
	6. All JButton components start with jbn*
*/

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class AddressBookDemo implements ActionListener
{
	ArrayList personsList;
   	PersonDAO pDAO;

   	JFrame appFrame;

   	JLabel jlbName, jlbAddress, jlbPhone, jlbEmail;
   	JTextField jtfName, jtfAddress, jtfPhone, jtfEmail;
   	JButton jbbSave, jbnDelete, jbnClear, jbnUpdate, jbnSearch,
   					jbnForward, jbnBack, jbnExit;
         
   	String name, address, email;
   	int phone;
   	int recordNumber;	 // used to naviagate using >> and << buttons 
   	Container cPane;
   public static void main(String args[]){
      new AddressBookDemo(); 
   }

   public AddressBookDemo()
   { 	
	    name    = "";
	    address = "";
	    email  = "";
	    phone   = -1 ;		//Stores 0 to indicate no Phone Number
	    recordNumber = -1;
	
	    createGUI();
	
	    personsList = new ArrayList();
	
	    // creating PersonDAO object
	    pDAO = new PersonDAO();	

   }

   	public void createGUI(){

   		/*Create a frame, get its contentpane and set layout*/
   		appFrame = new JFrame("Address Book");

   		cPane = appFrame.getContentPane();
   		cPane.setLayout(new GridBagLayout());
   		
   		//Arrange components on contentPane and set Action Listeners to each JButton
   		arrangeComponents();
   		
   		appFrame.setSize(240,300);
   		appFrame.setResizable(false);
   		appFrame.setVisible(true);

   	}
   	
   	public void arrangeComponents(){
   		jlbName = new JLabel("Name");
   		jlbAddress = new JLabel("Address");
   		jlbPhone = new JLabel("Phone");
   		jlbEmail = new JLabel("Email");

   		jtfName    = new JTextField(20);
   		jtfAddress = new JTextField(20);
   		jtfPhone   = new JTextField(20);
   		jtfEmail   = new JTextField(20);

   		jbbSave   = new JButton("Save");
   		jbnDelete = new JButton("Delete");
   		jbnClear  = new JButton("Clear");
   		jbnUpdate = new JButton("Update");
   		jbnSearch = new JButton("Search");

   		jbnForward = new JButton(">>");
   		jbnBack    = new JButton("<<");
   		jbnExit    = new JButton("Exit");

   		/*add all initialized components to the container*/
   		GridBagConstraints gridBagConstraintsx01 = new GridBagConstraints();
        gridBagConstraintsx01.gridx = 0;
        gridBagConstraintsx01.gridy = 0;
        gridBagConstraintsx01.insets = new Insets(5,5,5,5); 
        cPane.add(jlbName, gridBagConstraintsx01);
        
        GridBagConstraints gridBagConstraintsx02 = new GridBagConstraints();
        gridBagConstraintsx02.gridx = 1;
        gridBagConstraintsx02.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx02.gridy = 0;
        gridBagConstraintsx02.gridwidth = 2;
        gridBagConstraintsx02.fill = GridBagConstraints.BOTH;
        cPane.add(jtfName, gridBagConstraintsx02);
        
        GridBagConstraints gridBagConstraintsx03 = new GridBagConstraints();
        gridBagConstraintsx03.gridx = 0;
        gridBagConstraintsx03.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx03.gridy = 1;
        cPane.add(jlbAddress, gridBagConstraintsx03);
        
        GridBagConstraints gridBagConstraintsx04 = new GridBagConstraints();
        gridBagConstraintsx04.gridx = 1;
        gridBagConstraintsx04.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx04.gridy = 1;
        gridBagConstraintsx04.gridwidth = 2;
        gridBagConstraintsx04.fill = GridBagConstraints.BOTH;
        cPane.add(jtfAddress, gridBagConstraintsx04);
        
        GridBagConstraints gridBagConstraintsx05 = new GridBagConstraints();
        gridBagConstraintsx05.gridx = 0;
        gridBagConstraintsx05.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx05.gridy = 2;
        cPane.add(jlbPhone, gridBagConstraintsx05);
        
        GridBagConstraints gridBagConstraintsx06 = new GridBagConstraints();
        gridBagConstraintsx06.gridx = 1;
        gridBagConstraintsx06.gridy = 2;
        gridBagConstraintsx06.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx06.gridwidth = 2;
        gridBagConstraintsx06.fill = GridBagConstraints.BOTH;
        cPane.add(jtfPhone, gridBagConstraintsx06);
        
        GridBagConstraints gridBagConstraintsx07 = new GridBagConstraints();
        gridBagConstraintsx07.gridx = 0;
        gridBagConstraintsx07.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx07.gridy = 3;
        cPane.add(jlbEmail, gridBagConstraintsx07);
        
        GridBagConstraints gridBagConstraintsx08 = new GridBagConstraints();
        gridBagConstraintsx08.gridx = 1;
        gridBagConstraintsx08.gridy = 3;
        gridBagConstraintsx08.gridwidth = 2;
        gridBagConstraintsx08.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx08.fill = GridBagConstraints.BOTH;
        cPane.add(jtfEmail, gridBagConstraintsx08);
        
        GridBagConstraints gridBagConstraintsx09 = new GridBagConstraints();
        gridBagConstraintsx09.gridx = 0;
        gridBagConstraintsx09.gridy = 4;
        gridBagConstraintsx09.insets = new Insets(5,5,5,5); 
        cPane.add(jbbSave, gridBagConstraintsx09);
        
        GridBagConstraints gridBagConstraintsx10 = new GridBagConstraints();
        gridBagConstraintsx10.gridx = 1;
        gridBagConstraintsx10.gridy = 4;
        gridBagConstraintsx10.insets = new Insets(5,5,5,5); 
        cPane.add(jbnDelete, gridBagConstraintsx10);
        
        GridBagConstraints gridBagConstraintsx11 = new GridBagConstraints();
        gridBagConstraintsx11.gridx = 2;
        gridBagConstraintsx11.gridy = 4;
        gridBagConstraintsx11.insets = new Insets(5,5,5,5); 
        cPane.add(jbnUpdate, gridBagConstraintsx11);
        
        GridBagConstraints gridBagConstraintsx12 = new GridBagConstraints();
        gridBagConstraintsx12.gridx = 0;
        gridBagConstraintsx12.gridy = 5;
        gridBagConstraintsx12.insets = new Insets(5,5,5,5);
        cPane.add(jbnBack, gridBagConstraintsx12);
        
        GridBagConstraints gridBagConstraintsx13 = new GridBagConstraints();
        gridBagConstraintsx13.gridx = 1;
        gridBagConstraintsx13.gridy = 5;
        gridBagConstraintsx13.insets = new Insets(5,5,5,5); 
        cPane.add(jbnSearch, gridBagConstraintsx13);
        
        GridBagConstraints gridBagConstraintsx14 = new GridBagConstraints();
        gridBagConstraintsx14.gridx = 2;
        gridBagConstraintsx14.gridy = 5;
        gridBagConstraintsx14.insets = new Insets(5,5,5,5); 
        cPane.add(jbnForward, gridBagConstraintsx14);
        
        GridBagConstraints gridBagConstraintsx15 = new GridBagConstraints();
        gridBagConstraintsx15.gridx = 1;
        gridBagConstraintsx15.insets = new Insets(5,5,5,5); 
        gridBagConstraintsx15.gridy = 6;
        cPane.add(jbnClear, gridBagConstraintsx15);
        
        GridBagConstraints gridBagConstraintsx16 = new GridBagConstraints();
        gridBagConstraintsx16.gridx = 2;
        gridBagConstraintsx16.gridy = 6;
        gridBagConstraintsx16.insets = new Insets(5,5,5,5); 
        cPane.add(jbnExit, gridBagConstraintsx16);
   		
   		jbbSave.addActionListener(this);
   		jbnDelete.addActionListener(this);
   		jbnClear.addActionListener(this);
   		jbnUpdate.addActionListener(this);
   		jbnSearch.addActionListener(this);
   		jbnForward.addActionListener(this);
   		jbnBack.addActionListener(this);
   		jbnExit.addActionListener(this);
   	}

   	public void actionPerformed (ActionEvent e){
   		
   		if (e.getSource () == jbbSave){
             savePerson();
             clear(); 
        }

   		else if (e.getSource() == jbnDelete){
             deletePerson();
             clear();
        }

   		else if (e.getSource() == jbnUpdate){
             updatePerson();
             clear(); 
        }

   		else if (e.getSource() == jbnSearch){
             searchPerson();
        } 

   		else if (e.getSource() == jbnForward){
             displayNextRecord(); 
        }

  		else if (e.getSource() == jbnBack){
            displayPreviousRecord();
        }

   		else if (e.getSource() == jbnClear){
            clear();
        }

   		else if (e.getSource() == jbnExit){			
   			System.exit(0);
   		}

   	}
     // Save the Person into the Address Book 
     public void savePerson(){  
	   	name    = jtfName.getText();
	   	name = name.toUpperCase();	//Save all names in Uppercase
	   	address = jtfAddress.getText();
	   	try{
	   		phone = Integer.parseInt(""+jtfPhone.getText());
	   	}catch(Exception e){
	   		/*System.out.print("Input is a string");
	   		JOptionPane.showMessageDialog(null, "Please enter Phone Number");*/
	   	}
	   	
	   	email   = jtfEmail.getText();
	
	   	if(name.equals("")){
	   		JOptionPane.showMessageDialog(null, "Please enter person name.");
	   	}else{
		   	  //create a PersonInfo object and pass it to PersonDAO to save it
		   	  PersonInfo person = new PersonInfo(name, address, phone, email);
		   	  pDAO.savePerson(person);
		   	  JOptionPane.showMessageDialog(null, "Person Saved");
	      }
     }

     public void deletePerson(){

	   	name = jtfName.getText();
	   	name = name.toUpperCase();
	   	if(name.equals("")){
	   		JOptionPane.showMessageDialog(null,"Please enter person name to delete.");
	   	}
	   	else{
	   		//remove Person of the given name from the Address Book database
	   		int numberOfDeleted = pDAO.removePerson(name);
	   		JOptionPane.showMessageDialog(null, numberOfDeleted + " Record(s) deleted.");
	   	}
     }

    public void updatePerson(){
         if (recordNumber >= 0 && recordNumber < personsList.size())
         {
            PersonInfo person = (PersonInfo)personsList.get(recordNumber);

            int id = person.getId();

   	   /*get values from text fields*/            
   	   name    = jtfName.getText();
   	   address = jtfAddress.getText();
   	   phone   = Integer.parseInt(jtfPhone.getText());
       email   = jtfEmail.getText();

   	   /*update data of the given person name*/
   	   person = new PersonInfo(id, name, address, phone, email);
            pDAO.updatePerson(person);

   	   JOptionPane.showMessageDialog(null, "Person info record updated successfully.");         
         }
         else
         {   
              JOptionPane.showMessageDialog(null, "No record to Update");  
         }
    } 
    
    //Perform a Case-Insensitive Search to find the Person

      public void searchPerson() {
    
	   	name = jtfName.getText();
	   	name = name.toUpperCase();
	   	/*clear contents of arraylist if there are any from previous search*/
	   	personsList.clear();

	   	recordNumber = 0;
	
	   	if(name.equals("")){
	   		JOptionPane.showMessageDialog(null,"Please enter person name to search.");
	   	}
	   	else{
	   		/*get an array list of searched persons using PersonDAO*/
	   		personsList = pDAO.searchPerson(name);
	
	   		if(personsList.size() == 0){
	   			JOptionPane.showMessageDialog(null, "No records found.");
	   			//Perform a clear if no records are found.
	   			clear();
	   		}
	   		else
	   		{
	   			/*downcast the object from array list to PersonInfo*/
	   			PersonInfo person = (PersonInfo) personsList.get(recordNumber);
	
	             // displaying search record in text fields 
	   			jtfName.setText(person.getName());
	   			jtfAddress.setText(person.getAddress());
	   			jtfPhone.setText(""+person.getPhone());
	   			jtfEmail.setText(person.getEmail());
	   		}
	   	}

     }

   public void displayNextRecord(){

    // inc in recordNumber to display next person info, already stored in 
	//  personsList during search                  
   	recordNumber++;

   	if(recordNumber >= personsList.size()){
        JOptionPane.showMessageDialog(null, "You have reached end of " +
        		"search results"); 

   		/*if user has reached the end of results, disable forward button*/
   		jbnForward.setEnabled(false);
   		jbnBack.setEnabled(true);

       // dec by one to counter last inc
       recordNumber -- ; 
   	}
   	else{
   		jbnBack.setEnabled(true);
   		PersonInfo person = (PersonInfo) personsList.get(recordNumber);

       // displaying search record in text fields 
   		jtfName.setText(person.getName());
   		jtfAddress.setText(person.getAddress());
   		jtfPhone.setText(""+person.getPhone());
   		jtfEmail.setText(person.getEmail());
   	}
   }


     public void displayPreviousRecord(){

         // dec in recordNumber to display previous person info, already 
    	 //stored in personsList during search                  
	   	recordNumber--;
	
	   	if(recordNumber < 0 ){
	        JOptionPane.showMessageDialog(null, "You have reached begining " +
	        		"of search results"); 
	
	   		/*if user has reached the begining of results, disable back button*/
	   		jbnForward.setEnabled(true);
	   		jbnBack.setEnabled(false);
	
             // inc by one to counter last dec
               recordNumber++;
	   	}else{
	   		jbnForward.setEnabled(true);
	   		PersonInfo person = (PersonInfo) personsList.get(recordNumber);
	
	        // displaying search record in text fields 
	   		jtfName.setText(person.getName());
	   		jtfAddress.setText(person.getAddress());
	   		jtfPhone.setText(""+person.getPhone());
	   		jtfEmail.setText(person.getEmail());
	   	}

     }

     public void clear(){
    
	   	jtfName.setText("");
	   	jtfAddress.setText("");
	   	jtfPhone.setText("");
	   	jtfEmail.setText("");
	   	
	   	/*clear contents of arraylist*/
	    recordNumber = -1;
	   	personsList.clear();
	   	jbnForward.setEnabled(true);
	   	jbnBack.setEnabled(true);
     }


   }
       
/*
Name: Hemanth. B
Website: java-swing-tutorial.html

Topic: A basic Java Address Book

Conventions Used in Source code
---------------------------------
	1. All JLabel components start with jlb*
	2. All JPanel components start with jpl*
	3. All JMenu components start with jmenu*
	4. All JMenuItem components start with jmenuItem*
	5. All JDialog components start with jdlg*
	6. All JButton components start with jbn*
*/



import java.util.*;
import java.sql.*;

public class PersonDAO{      
	
	/* Person Table needs to be created in the Oracle Database.
	 * create table Person (
	id Integer,
	name Varchar(30),
	address Varchar(30),
	phone Integer,
	email Varchar(50)
);*/


	private ArrayList personsList;
	private String userid = "scott";
	private String password = "tiger";
	static String url = "jdbc:odbc:bob";	

	private Connection con;

     // constructor 
	public PersonDAO(){
		personsList = new ArrayList();
		getConnection();		//Create Connection to the Oracle Database
	}

	public Connection getConnection(){
				
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");	

		} catch(java.lang.ClassNotFoundException e) {
			System.err.print("ClassNotFoundException: ");
			System.err.println(e.getMessage());
		}

		try {
			con = DriverManager.getConnection(url, userid, password);
		} catch(SQLException ex) {
			System.err.println("SQLException: " + ex.getMessage());
		}
		
		return con;
	}

	public ArrayList searchPerson(String name)
	{
		try	{
			String sql = "SELECT * FROM Person WHERE name like '%"+name+"%'";

			// Create a prepared statement
 			Statement s = con.createStatement();

			ResultSet rs = s.executeQuery(sql);

            String pname = "";
            String address = "";
            String email = "";
            int id, phone;

			while(rs.next())
			{
                id = rs.getInt("id");
				pname = rs.getString("name");
				address = rs.getString("address");
				phone = rs.getInt("phone");
				email = rs.getString("email");

				//Create a PersonInfo object
				PersonInfo person = new PersonInfo(id, pname, address, phone, email);

				//Add the person object to array list
				personsList.add(person);
			}
		}
		catch(Exception e){
			System.out.println(e);
		}
           
		return personsList;

	} 

	public void savePerson(PersonInfo person){
		try
		{
			String sql = "INSERT INTO Person(name, address, " +
							"phone, email) VALUES (?,?,?,?) ";

			// Create a Preparedstatement
 			PreparedStatement ps = con.prepareStatement(sql);
	
			ps.setString(1, person.getName());
			ps.setString(2, person.getAddress());
			ps.setInt(3, person.getPhone());
			ps.setString(4, person.getEmail());

			ps.executeUpdate();
		}
		catch(Exception e){
			System.out.println(e);
		}
	}

	public void updatePerson(PersonInfo person)
	{
		try
		{
			String sql = "UPDATE Person SET name = ?, address=? , " +
					"phone=? , email=? where id=?";

			// Create a Prepared statement
 			PreparedStatement ps = con.prepareStatement(sql);
	
			ps.setString(1 , person.getName());		
			ps.setString(2 , person.getAddress());
			ps.setInt(3 , person.getPhone());
			ps.setString(4 , person.getEmail());
			ps.setInt(5 , person.getId());

			ps.executeUpdate();
		}
		catch(Exception e){
			System.out.println(e);
		}
	}

	public int removePerson(String name){
        int no = 0;
		try{
			String sql = "DELETE FROM Person WHERE name = ?";
			// Create a Prepared statement
 			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, name);
			no = ps.executeUpdate();
		}
		catch(Exception e){
			System.out.println(e);
		}
		return no;
	}

}// end class PersonDAO


       
/*
Name: Hemanth. B
Website: java-swing-tutorial.html

Topic: A basic Java Address Book

Conventions Used in Source code
---------------------------------
	1. All JLabel components start with jlb*
	2. All JPanel components start with jpl*
	3. All JMenu components start with jmenu*
	4. All JMenuItem components start with jmenuItem*
	5. All JDialog components start with jdlg*
	6. All JButton components start with jbn*
*/


public class PersonInfo
{
	private String name,address,email;
	private int id, phone;

      // default constructor
      public PersonInfo()
      {       
         name = "";
         address = "";
         email = "";

         id = 0;  
         phone = 0;
      }

      // param constructor with 5 values 
	public PersonInfo(int id, String name, String address, int phone, String email)
	{
        this.id = id;
		this.name = name;
		this.address = address;
		this.phone = phone;
		this.email = email;
	}
 
      // param construcrtor with 4 values 
	public PersonInfo(String name, String address, int phone, String email)
	{
		this.name = name;
		this.address = address;
		this.phone = phone;
		this.email = email;
	}

      // setters
	public void setId(int i)
	{
		id = i;
	}

	public void setName(String n)
	{
		name=n;		
	}
	public void setAddress(String a)
	{
		address=a;
	}
	public void setPhone(int ph)
	{
		phone=ph;
	}
	public void setEmail(String e)
	{
		email=e;
	}

      // getters
	public int getId( )
	{
		return id;
      }

	public String getName()
	{
		return name;
	}

	public String getAddress()
	{
		return address;
	}

	public int getPhone()
	{
		return phone;
	}

	public String getEmail()
	{
		return email;
	}

}
       
SQL Table
create table Person (
	id Integer,
	name Varchar(30),
	address Varchar(30),
	phone Integer,
	email Varchar(50)
 

Download Java Address Book Source Code