Create Week08_yourName_AddressBook.java as follows; - Need to display FirstName,
ID: 3867643 • Letter: C
Question
Create Week08_yourName_AddressBook.java as follows;
- Need to display FirstName,LastName,PhoneNumber, and Emails minimum at first window.
- User need to Add new Person, Delete existing Person, Update existing Person.
- User can sort the table by any column.
- Also needs to be serialized(being able to save information even after being exited out).
- A a txt file or database file to permenantly save the additional contacts even after exiting the program.
Note: Must display minimum 5 Person in the table at start-up.
Explanation / Answer
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.java
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);
}
}
}
ContactMenu.java
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();
//Here we applied sort
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")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
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);
}// </editor-fold>
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);
}
//</editor-fold>
/* 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
}