Question: Create Week08_AddressBook.java as follows using Gui; - Need to display FirstName,LastName,PhoneNumber, and Emails minimum at first window. - User needs to be able to Add
Create Week08_AddressBook.java as follows using Gui; - Need to display FirstName,LastName,PhoneNumber, and Emails minimum at first window. - User needs to be able to Add new Person, Delete existing Person, and Update existing Person. - User can sort the table by any column.
Note: Must display minimum 5 Person in the table at start-up, must have option for users who have multiple emails. The code needs to allowmthe user to have 2 emails when I want to update it and allow user to have 1 email.
Contact.Java
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; }
}
ContactTableModel
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
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); } } }
ContactMenu
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
public ContactMenu() { initComponents();
createFirstFiveItems();
updateTable(); //Here we applied sort jTable1.setAutoCreateRowSorter(true);
}
private void updateTable() { TableModel tableModel = new ContactTableModel(lstContact); jTable1.setModel(tableModel); } public List
lstContact.add(new Contact("beyonce", "knowles", "252 352 4356", "Yonce@knowles.com")); lstContact.add(new Contact("Kim", "Kardashian", "222 245 6547", "kim@kardashian.com")); lstContact.add(new Contact("Jamie", "Fox", "253 098 7857", "Jamie@Fox.com")); lstContact.add(new Contact("Harry", "Potter", "Owl", "harry@potter.com")); lstContact.add(new Contact("James", "Corden", "555 895 0914", "James@Corden.com")); return lstContact; }
@SuppressWarnings("unchecked") //
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) { // TODO add your handling code here: 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) {
// TODO add your handling code here: 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) { // TODO add your handling code here: // JOptionPane.showMessageDialog(rootPane, "Sele=" + jTable1.getSelectedRow()); 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) { // TODO add your handling code here: 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); } //
/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ContactMenu().setVisible(true); } }); }
// Variables declaration - do not modify 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; // End of variables declaration }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
