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 how to save additional contacts and have those ad

ID: 3869005 • Letter: C

Question

Can someone help me figure out how to save additional contacts and have those additional contacts reappear again, after exiting and rerunning the program? So far this is what I've came up with.

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.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<Contact> lstContact;

   public ContactTableModel(List<Contact> lsContact) {

       this.lstContact = lsContact;

       int indexCount = 1;

       for (Contact c : lsContact) {

           c.setSrno(indexCount++);

       }

   }

   @Override

   public int getRowCount() {

       return lstContact.size();

   }

   @Override

   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;

   }

   @Override

   public String getColumnName(int columnIndex) {

       return columnNames[columnIndex];

   }

   @Override

   public Class<?> getColumnClass(int columnIndex) {

       if (lstContact.isEmpty()) {

           return Object.class;

       }

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

   }

   @Override

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

       Contact c = lstContact.get(rowIndex);

       if (columnIndex == SRNO) {

           c.setSrno((int) value);

       }

   }

}

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<Contact> lstContact = new ArrayList<>();

public ContactMenu() {

       initComponents();

       createFirstFiveItems();

updateTable();

       jTable1.setAutoCreateRowSorter(true);

   }

   private void updateTable() {

       TableModel tableModel = new ContactTableModel(lstContact);

       jTable1.setModel(tableModel);

   }

   public List<Contact> 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;

   }

   @SuppressWarnings("unchecked")

   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;

}

Explanation / Answer

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.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<Contact> lstContact;

   public ContactTableModel(List<Contact> lsContact) {

       this.lstContact = lsContact;

       int indexCount = 1;

       for (Contact c : lsContact) {

           c.setSrno(indexCount++);

       }

   }

   @Override

   public int getRowCount() {

       return lstContact.size();

   }

   @Override

   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;

   }

   @Override

   public String getColumnName(int columnIndex) {

       return columnNames[columnIndex];

   }

   @Override

   public Class<?> getColumnClass(int columnIndex) {

       if (lstContact.isEmpty()) {

           return Object.class;

       }

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

   }

   @Override

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

       Contact c = lstContact.get(rowIndex);

       if (columnIndex == SRNO) {

           c.setSrno((int) value);

       }

   }

}

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<Contact> lstContact = new ArrayList<>();

public ContactMenu() {

       initComponents();

       createFirstFiveItems();

updateTable();

       jTable1.setAutoCreateRowSorter(true);

   }

   private void updateTable() {

       TableModel tableModel = new ContactTableModel(lstContact);

       jTable1.setModel(tableModel);

   }

   public List<Contact> 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;

   }

   @SuppressWarnings("unchecked")

   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;

}

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