Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can someone help me figure out why my java program won\'t save/update informatio

ID: 3861098 • Letter: C

Question

Can someone help me figure out why my java program won't save/update information after being exited out then running the program again to see the updated information! Its basically revolving around serializations. Please Help!

public class Contact {
int srno;
   String FirstName, LastName, PhoneNumber, Email;

   public Contact(String FirstName, String LastName, String PhoneNumber, String Email) {

       this.FirstName = FirstName;

       this.LastName = LastName;

       this.PhoneNumber = PhoneNumber;

       this.Email = Email;

   }

   public String getFirstName() {

       return FirstName;

   }

   public void setFirstName(String FirstName) {

       this.FirstName = FirstName;

   }

   public String getLastName() {

       return LastName;

   }

   public void setLastName(String LastName) {

       this.LastName = LastName;

   }

   public String getPhoneNumber() {

       return PhoneNumber;

   }

   public void setPhoneNumber(String PhoneNumber) {

       this.PhoneNumber = PhoneNumber;

   }

   public String getEmail() {

       return Email;

   }

   public void setEmail(String Email) {

       this.Email = Email;

   }

   public int getSrno() {

       return srno;

   }
public void setSrno(int srno) {

       this.srno = srno;

   }
}

import java.util.ArrayList;

import java.util.List;

import javax.swing.JOptionPane;

import javax.swing.table.TableModel;

public class ContactMenu extends javax.swing.JFrame {

   List lstContact = new ArrayList<>();

   public ContactMenu() {

       initComponents();

       createFirstFiveItems();

       updateTable();

       jTable1.setAutoCreateRowSorter(true);

   }

   private void updateTable() {

       TableModel tableModel = new ContactTableModel(lstContact);

       jTable1.setModel(tableModel);

   }

   public List createFirstFiveItems() {

       lstContact.add(new Contact("John", "Cenha", "111111", "john@cena.com"));

       lstContact.add(new Contact("Mike", "Tyson", "222222", "mike@tyson.com"));

       lstContact.add(new Contact("Ken", "WilliamSon", "3333333", "ken@william.com"));

       lstContact.add(new Contact("Harry", "Potter", "44444444", "harry@potter.com"));

       lstContact.add(new Contact("Robert", "Dwayn", "555555", "robert@dwayn.com"));

       return lstContact;

   }

   private void initComponents() {

       btnAdd = new javax.swing.JButton();

       jLabel1 = new javax.swing.JLabel();

       jLabel2 = new javax.swing.JLabel();

       jLabel3 = new javax.swing.JLabel();

       jLabel4 = new javax.swing.JLabel();

       txtFirstName = new javax.swing.JTextField();

       txtLastName = new javax.swing.JTextField();

       txtPhone = new javax.swing.JTextField();

       txtEmail = new javax.swing.JTextField();

       jScrollPane1 = new javax.swing.JScrollPane();

       jTable1 = new javax.swing.JTable();

       btnDelete = new javax.swing.JButton();

       btnUpdate = new javax.swing.JButton();

       setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

       btnAdd.setText("Add Contact");

       btnAdd.addActionListener(new java.awt.event.ActionListener() {

           public void actionPerformed(java.awt.event.ActionEvent evt) {

               btnAddActionPerformed(evt);

           }

       });

       jLabel1.setText("First Name");

       jLabel2.setText("Last Name");

       jLabel3.setText("Phone Number");

       jLabel4.setText("Email");

       jTable1.setModel(

               new javax.swing.table.DefaultTableModel(

                       new Object[][] { { null, null, null, null }, { null, null, null, null },

                               { null, null, null, null }, { null, null, null, null } },

                       new String[] { "Title 1", "Title 2", "Title 3", "Title 4" }));

       jTable1.addMouseListener(new java.awt.event.MouseAdapter() {

           public void mouseClicked(java.awt.event.MouseEvent evt) {

               jTable1MouseClicked(evt);

           }

       });

       jScrollPane1.setViewportView(jTable1);

       btnDelete.setText("Delete");

       btnDelete.addActionListener(new java.awt.event.ActionListener() {

           public void actionPerformed(java.awt.event.ActionEvent evt) {

               btnDeleteActionPerformed(evt);

           }

       });

       btnUpdate.setText("Update");

       btnUpdate.addActionListener(new java.awt.event.ActionListener() {

           public void actionPerformed(java.awt.event.ActionEvent evt) {

               btnUpdateActionPerformed(evt);

           }

       });

       javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

       getContentPane().setLayout(layout);

       layout.setHorizontalGroup(

               layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                       .addGroup(layout.createSequentialGroup().addGap(26, 26, 26)

                               .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                                       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 704,

                                               javax.swing.GroupLayout.PREFERRED_SIZE)

                                       .addGroup(layout.createSequentialGroup().addGap(127, 127, 127).addGroup(layout

                                               .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                                               .addGroup(

                                                       layout.createSequentialGroup().addComponent(jLabel1)

                                                               .addGap(50, 50, 50)

                                                               .addComponent(txtFirstName,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE, 178,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE))

                                               .addGroup(layout.createSequentialGroup().addGroup(layout

                                                       .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                                                       .addComponent(jLabel2).addComponent(jLabel3)

                                                       .addComponent(jLabel4))

                                                       .addGap(31, 31, 31)

                                                       .addGroup(layout

                                                               .createParallelGroup(

                                                                       javax.swing.GroupLayout.Alignment.LEADING)

                                                               .addComponent(txtLastName,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE, 178,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE)

                                                               .addComponent(txtPhone,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE,

                                                                       178, javax.swing.GroupLayout.PREFERRED_SIZE)

                                                               .addComponent(txtEmail,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE, 178,

                                                                       javax.swing.GroupLayout.PREFERRED_SIZE))))

                                               .addGap(37, 37, 37)

                                               .addGroup(layout

                                                       .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,

                                                               false)

                                                       .addComponent(btnAdd, javax.swing.GroupLayout.DEFAULT_SIZE,

                                                               javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                                                       .addComponent(btnDelete, javax.swing.GroupLayout.DEFAULT_SIZE,

                                                               javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                                                       .addComponent(btnUpdate, javax.swing.GroupLayout.DEFAULT_SIZE,

                                                               javax.swing.GroupLayout.DEFAULT_SIZE,

                                                               Short.MAX_VALUE))))

                               .addContainerGap(28, Short.MAX_VALUE)));

       layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

               .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGap(21, 21, 21)

                       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout

                               .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1)

                               .addComponent(txtFirstName, javax.swing.GroupLayout.PREFERRED_SIZE,

                                       javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

                               .addComponent(btnAdd))

                       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                               .addGroup(layout.createSequentialGroup()

                                       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

                                               .addComponent(txtLastName, javax.swing.GroupLayout.PREFERRED_SIZE,

                                                       javax.swing.GroupLayout.DEFAULT_SIZE,

                                                       javax.swing.GroupLayout.PREFERRED_SIZE)

                                               .addComponent(btnDelete))

                                       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                                       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

                                               .addComponent(txtPhone, javax.swing.GroupLayout.PREFERRED_SIZE,

                                                       javax.swing.GroupLayout.DEFAULT_SIZE,

                                                       javax.swing.GroupLayout.PREFERRED_SIZE)

                                               .addComponent(btnUpdate))

                                       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                                       .addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE,

                                               javax.swing.GroupLayout.DEFAULT_SIZE,

                                               javax.swing.GroupLayout.PREFERRED_SIZE))

                               .addGroup(layout.createSequentialGroup().addComponent(jLabel2).addGap(13, 13, 13)

                                       .addComponent(jLabel3)

                                       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

                                       .addComponent(jLabel4)))

                       .addGap(18, 18, 18)

                       .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 215, Short.MAX_VALUE)

                       .addContainerGap()));

       pack();

       setLocationRelativeTo(null);

   }

   public static boolean isNumeric(String str) {

       try {

           double d = Double.parseDouble(str);

       } catch (NumberFormatException nfe) {

           return false;

       }

       return true;

   }

   private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {

       try {

           int selectedRow = jTable1.getSelectedRow();

           lstContact.remove(selectedRow);

           updateTable();

           JOptionPane.showMessageDialog(rootPane, "Contact Removed!");

           clearTextBoxes();

       } catch (Exception ex) {

           JOptionPane.showMessageDialog(rootPane, "Select a row to delete!");

       }

   }

   private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {

       if (txtFirstName.getText().equals(""))

           JOptionPane.showMessageDialog(rootPane, "Enter First Name");

       else if (txtLastName.getText().equals(""))

           JOptionPane.showMessageDialog(rootPane, "Enter Last Name");

       else if (txtPhone.getText().equals(""))

           JOptionPane.showMessageDialog(rootPane, "Enter Phone Number");

       else if (!isNumeric(txtPhone.getText()))

           JOptionPane.showMessageDialog(rootPane, "Enter phone Number numeric only");

       else if (txtEmail.getText().equals(""))

           JOptionPane.showMessageDialog(rootPane, "Enter Email");

       else if (!isValidEmailAddress(txtEmail.getText()))

           JOptionPane.showMessageDialog(rootPane, "Enter a valid Email");

       else {

           lstContact.add(

                   new Contact(txtFirstName.getText(), txtLastName.getText(), txtPhone.getText(), txtEmail.getText()));

           updateTable();

           clearTextBoxes();

           JOptionPane.showMessageDialog(rootPane, "Contact added successfully");

       }

   }

   public boolean isValidEmailAddress(String email) {

       String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";

       java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern);

       java.util.regex.Matcher m = p.matcher(email);

       return m.matches();

   }

   private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {

       txtFirstName.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 1));

       txtLastName.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 2));

       txtPhone.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 3));

       txtEmail.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 4));

   }

   private void clearTextBoxes() {

       txtFirstName.setText(null);

       txtLastName.setText(null);

       txtPhone.setText(null);

       txtEmail.setText(null);

   }

   private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {

       try {

           lstContact.set(jTable1.getSelectedRow(),

                   new Contact(txtFirstName.getText(), txtLastName.getText(), txtPhone.getText(), txtEmail.getText()));

           updateTable();

           JOptionPane.showMessageDialog(rootPane, "Contact Updated!");

           jTable1.getSelectionModel().clearSelection();

           clearTextBoxes();

       } catch (Exception ex) {

           JOptionPane.showMessageDialog(rootPane, "Please select a row first");

       }

   }

   public static void main(String args[]) {

       try {

           for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

               if ("Nimbus".equals(info.getName())) {

                   javax.swing.UIManager.setLookAndFeel(info.getClassName());

                   break;

               }

           }

       } catch (ClassNotFoundException ex) {

           java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

                   ex);

       } catch (InstantiationException ex) {

           java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

                   ex);

       } catch (IllegalAccessException ex) {

           java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

                   ex);

       } catch (javax.swing.UnsupportedLookAndFeelException ex) {

           java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

                   ex);

       }

       java.awt.EventQueue.invokeLater(new Runnable() {

           public void run() {

               new ContactMenu().setVisible(true);

           }

       });

   }

   private javax.swing.JButton btnAdd;

   private javax.swing.JButton btnDelete;

   private javax.swing.JButton btnUpdate;

   private javax.swing.JLabel jLabel1;

   private javax.swing.JLabel jLabel2;

   private javax.swing.JLabel jLabel3;

   private javax.swing.JLabel jLabel4;

   private javax.swing.JScrollPane jScrollPane1;

   private javax.swing.JTable jTable1;

   private javax.swing.JTextField txtEmail;

   private javax.swing.JTextField txtFirstName;

   private javax.swing.JTextField txtLastName;

   private javax.swing.JTextField txtPhone;

}

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class ContactTableModel extends AbstractTableModel {

   private static final int SRNO = 0;

   private static final int FIRSTNAME = 1;

   private static final int LASTNAME = 2;

   private static final int PHONE = 3;

   private static final int EMAIL = 4;

   private String[] columnNames = { "SrNo", "FirstName", "LastName", "Phone", "Email" };

   private List lstContact;

   public ContactTableModel(List lsContact) {

       this.lstContact = lsContact;

       int indexCount = 1;

       for (Contact c : lsContact) {

           c.setSrno(indexCount++);

       }

   }

   public int getRowCount() {

       return lstContact.size();

   }

   public int getColumnCount() {

       return columnNames.length;

   }

   @Override

   public Object getValueAt(int rowIndex, int columnIndex) {

       Contact c = lstContact.get(rowIndex);

       Object returnValue = null;

       switch (columnIndex) {

       case SRNO:

           returnValue = c.getSrno();

           break;

       case FIRSTNAME:

           returnValue = c.getFirstName();

           break;

       case LASTNAME:

           returnValue = c.getLastName();

           break;

       case PHONE:

           returnValue = c.getPhoneNumber();

           break;

       case EMAIL:

           returnValue = c.getEmail();

           break;

       default:

           throw new IllegalArgumentException("Invalid column index");

       }

       return returnValue;

   }

   public String getColumnName(int columnIndex) {

       return columnNames[columnIndex];

   }

   public Class getColumnClass(int columnIndex) {

       if (lstContact.isEmpty()) {

           return Object.class;

       }

       return getValueAt(0, columnIndex).getClass();

   }

   public void setValueAt(Object value, int rowIndex, int columnIndex) {

       Contact c = lstContact.get(rowIndex);

       if (columnIndex == SRNO) {

           c.setSrno((int) value);

       }

   }

}

Explanation / Answer

You need to add input outpur streams in the main class and write added contacts to an external file , refer below code of ContactMenu class. I commented out part of code where you hard coded contacts to appear when application runs and created an input stream to read contacts from an external serialized file . When you add acontact , immediately after adding it to list , serialize it and save it in an external file . This way your data gets saved and can be retrieved from same file when you start application. Added code is in bold and italic , modify file location ...changes your contact class to implement Serializable interface . Hope this helps...

package temp;

import java.io.EOFException;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JOptionPane;

import javax.swing.table.TableModel;

public class ContactMenu extends javax.swing.JFrame {

List lstContact = new ArrayList<>();

//Serialisation

static FileOutputStream fileOut;

static ObjectOutputStream out;

static FileInputStream fileIn;

static ObjectInputStream in;

public ContactMenu() {

initComponents();

createFirstFiveItems();

updateTable();

jTable1.setAutoCreateRowSorter(true);

}

private void updateTable() {

TableModel tableModel = new ContactTableModel(lstContact);

jTable1.setModel(tableModel);

}

public List createFirstFiveItems() {

/*

* lstContact.add(new Contact("John", "Cenha", "111111",

* "john@cena.com")); lstContact.add(new Contact("Mike", "Tyson",

* "222222", "mike@tyson.com")); lstContact.add(new Contact("Ken",

* "WilliamSon", "3333333", "ken@william.com")); lstContact.add(new

* Contact("Harry", "Potter", "44444444", "harry@potter.com"));

* lstContact.add(new Contact("Robert", "Dwayn", "555555",

* "robert@dwayn.com"));

*/

Contact contact;

try {

contact = (Contact) in.readObject();

} catch (EOFException eof) {

System.out.println("End of file reached");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return lstContact;

}

private void initComponents() {

btnAdd = new javax.swing.JButton();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

txtFirstName = new javax.swing.JTextField();

txtLastName = new javax.swing.JTextField();

txtPhone = new javax.swing.JTextField();

txtEmail = new javax.swing.JTextField();

jScrollPane1 = new javax.swing.JScrollPane();

jTable1 = new javax.swing.JTable();

btnDelete = new javax.swing.JButton();

btnUpdate = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

btnAdd.setText("Add Contact");

btnAdd.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnAddActionPerformed(evt);

}

});

jLabel1.setText("First Name");

jLabel2.setText("Last Name");

jLabel3.setText("Phone Number");

jLabel4.setText("Email");

jTable1.setModel(

new javax.swing.table.DefaultTableModel(

new Object[][] { { null, null, null, null }, { null, null, null, null },

{ null, null, null, null }, { null, null, null, null } },

new String[] { "Title 1", "Title 2", "Title 3", "Title 4" }));

jTable1.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent evt) {

jTable1MouseClicked(evt);

}

});

jScrollPane1.setViewportView(jTable1);

btnDelete.setText("Delete");

btnDelete.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnDeleteActionPerformed(evt);

}

});

btnUpdate.setText("Update");

btnUpdate.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnUpdateActionPerformed(evt);

}

});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup().addGap(26, 26, 26)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 704,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addGroup(layout.createSequentialGroup().addGap(127, 127, 127).addGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout.createSequentialGroup().addComponent(jLabel1)

.addGap(50, 50, 50)

.addComponent(txtFirstName,

javax.swing.GroupLayout.PREFERRED_SIZE, 178,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup().addGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jLabel2).addComponent(jLabel3)

.addComponent(jLabel4))

.addGap(31, 31, 31)

.addGroup(layout

.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(txtLastName,

javax.swing.GroupLayout.PREFERRED_SIZE, 178,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(txtPhone,

javax.swing.GroupLayout.PREFERRED_SIZE,

178, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(txtEmail,

javax.swing.GroupLayout.PREFERRED_SIZE, 178,

javax.swing.GroupLayout.PREFERRED_SIZE))))

.addGap(37, 37, 37)

.addGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,

false)

.addComponent(btnAdd, javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(btnDelete, javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(btnUpdate, javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

Short.MAX_VALUE))))

.addContainerGap(28, Short.MAX_VALUE)));

layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGap(21, 21, 21)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1)

.addComponent(txtFirstName, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addComponent(btnAdd))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(txtLastName, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(btnDelete))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(txtPhone, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(btnUpdate))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup().addComponent(jLabel2).addGap(13, 13, 13)

.addComponent(jLabel3)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addComponent(jLabel4)))

.addGap(18, 18, 18)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 215, Short.MAX_VALUE)

.addContainerGap()));

pack();

setLocationRelativeTo(null);

}

public static boolean isNumeric(String str) {

try {

double d = Double.parseDouble(str);

} catch (NumberFormatException nfe) {

return false;

}

return true;

}

private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {

try {

int selectedRow = jTable1.getSelectedRow();

lstContact.remove(selectedRow);

updateTable();

JOptionPane.showMessageDialog(rootPane, "Contact Removed!");

clearTextBoxes();

} catch (Exception ex) {

JOptionPane.showMessageDialog(rootPane, "Select a row to delete!");

}

}

private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {

if (txtFirstName.getText().equals(""))

JOptionPane.showMessageDialog(rootPane, "Enter First Name");

else if (txtLastName.getText().equals(""))

JOptionPane.showMessageDialog(rootPane, "Enter Last Name");

else if (txtPhone.getText().equals(""))

JOptionPane.showMessageDialog(rootPane, "Enter Phone Number");

else if (!isNumeric(txtPhone.getText()))

JOptionPane.showMessageDialog(rootPane, "Enter phone Number numeric only");

else if (txtEmail.getText().equals(""))

JOptionPane.showMessageDialog(rootPane, "Enter Email");

else if (!isValidEmailAddress(txtEmail.getText()))

JOptionPane.showMessageDialog(rootPane, "Enter a valid Email");

else {

Contact contact = new Contact(txtFirstName.getText(), txtLastName.getText(), txtPhone.getText(),

txtEmail.getText());

lstContact.add(contact);

// Serialise above object , add it to a file outside

try {

out.writeObject(contact);

} catch (IOException e) {

e.printStackTrace();

}

updateTable();

clearTextBoxes();

JOptionPane.showMessageDialog(rootPane, "Contact added successfully");

}

}

public boolean isValidEmailAddress(String email) {

String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";

java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern);

java.util.regex.Matcher m = p.matcher(email);

return m.matches();

}

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {

txtFirstName.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 1));

txtLastName.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 2));

txtPhone.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 3));

txtEmail.setText("" + jTable1.getValueAt(jTable1.getSelectedRow(), 4));

}

private void clearTextBoxes() {

txtFirstName.setText(null);

txtLastName.setText(null);

txtPhone.setText(null);

txtEmail.setText(null);

}

private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {

try {

lstContact.set(jTable1.getSelectedRow(),

new Contact(txtFirstName.getText(), txtLastName.getText(), txtPhone.getText(), txtEmail.getText()));

updateTable();

JOptionPane.showMessageDialog(rootPane, "Contact Updated!");

jTable1.getSelectionModel().clearSelection();

clearTextBoxes();

} catch (Exception ex) {

JOptionPane.showMessageDialog(rootPane, "Please select a row first");

}

}

public static void main(String args[]) {

try {

fileIn = new FileInputStream("D:/Chetan/contact.ser");

in = new ObjectInputStream(fileIn);

fileOut = new FileOutputStream("D:/Chetan/contact.ser");

out = new ObjectOutputStream(fileOut);

} catch (IOException i) {

i.printStackTrace();

}

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(ContactMenu.class.getName()).log(java.util.logging.Level.SEVERE, null,

ex);

}

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new ContactMenu().setVisible(true);

}

});

}

private javax.swing.JButton btnAdd;

private javax.swing.JButton btnDelete;

private javax.swing.JButton btnUpdate;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JTable jTable1;

private javax.swing.JTextField txtEmail;

private javax.swing.JTextField txtFirstName;

private javax.swing.JTextField txtLastName;

private javax.swing.JTextField txtPhone;

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote