import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.Window.Type;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Component;
import java.awt.SystemColor;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Main extends JFrame {
private JTextField Searchtextfield;
private JTable table;
private JTextField Firstnametext;
private JTextField lastnametext;
private JTextField Phonenumbertext;
private JTextField Emailtext;
/**
* Instantiates a new main.
*
* This program allow you to store information in a table and export out and excel file
* or save as a text file
*
* @throws Exception the exception
*/
public Main() throws Exception {
getContentPane().setLayout(null);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBackground(new Color(189, 183, 107));
tabbedPane.setBounds(0, 32, 650, 365);
getContentPane().add(tabbedPane);
MaskFormatter mf2 = new MaskFormatter("(###) ###-####");
// the main panel that hold the search bar and table
JPanel MainPanel = new JPanel();
MainPanel.setBackground(Color.LIGHT_GRAY);
tabbedPane.addTab("Main", null, MainPanel, null);
MainPanel.setLayout(null);
// the search text field
Searchtextfield = new JTextField();
Searchtextfield.setBounds(485, 11, 129, 20);
MainPanel.add(Searchtextfield);
Searchtextfield.setColumns(10);
// the search label on the main panel
JLabel Searchlabel = new JLabel("Seach:");
Searchlabel.setBounds(443, 14, 46, 14);
MainPanel.add(Searchlabel);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 42, 604, 195);
MainPanel.add(scrollPane);
table = new JTable();
table.setBorder(UIManager.getBorder("DesktopIcon.border"));
scrollPane.setViewportView(table);
// the column in the table
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"First Name", "Last Name", "Phone Number", "Email"
}
));
// a panel that hold the first name, last name, phone number and email text field for entering
// information into the table on the main panel
JPanel AddentryPanel = new JPanel();
AddentryPanel.setBackground(Color.LIGHT_GRAY);
// add the entry tab for inputting information
tabbedPane.addTab("Add Entry", null, AddentryPanel, null);
// set absolute layout
AddentryPanel.setLayout(null);
// a text field for entering you first name
Firstnametext = new JTextField();
Firstnametext.setBounds(175, 49, 308, 34);
// add the first name text field to the add entry panel
AddentryPanel.add(Firstnametext);
Firstnametext.setColumns(10);
JLabel lblNewLabel = new JLabel("First Name:");
lblNewLabel.setForeground(Color.BLUE);
lblNewLabel.setBounds(98, 59, 99, 14);
AddentryPanel.add(lblNewLabel);
JLabel Lastnamelabel = new JLabel("Last Name:");
Lastnamelabel.setForeground(Color.BLUE);
Lastnamelabel.setBounds(98, 104, 110, 14);
AddentryPanel.add(Lastnamelabel);
// a text field for entering you last name
lastnametext = new JTextField();
lastnametext.setColumns(10);
lastnametext.setBounds(175, 94, 308, 34);
// add the last name to the entry panel
AddentryPanel.add(lastnametext);
// add a formatted text field for you phone number. This field only allow number.
Phonenumbertext = new JFormattedTextField(mf2);
Phonenumbertext.setColumns(10);
Phonenumbertext.setBounds(175, 145, 308, 34);
// add the formatted text field to entry panel
AddentryPanel.add(Phonenumbertext);
// a text field for entering you email
Emailtext = new JTextField();
Emailtext.setColumns(10);
Emailtext.setBounds(175, 190, 308, 34);
// add the email text field to the add entry panel
AddentryPanel.add(Emailtext);
JLabel Phonenumberlabel = new JLabel("Phone Number:");
Phonenumberlabel.setForeground(Color.BLUE);
Phonenumberlabel.setBounds(77, 155, 93, 14);
AddentryPanel.add(Phonenumberlabel);
JLabel Email = new JLabel("Email:");
Email.setForeground(Color.BLUE);
Email.setBounds(126, 200, 54, 14);
AddentryPanel.add(Email);
// a button that add information into the table from the first name, last name, email
// and you phone number field.
JButton AddEntrybutton = new JButton("Add");
AddEntrybutton.setForeground(Color.GREEN);
// add a action listener for add entry button
AddEntrybutton.addActionListener(new ActionListener() {
/*
* This action listener for entry button will prompt
* you, if you want to add information into the table.
* It also check if all the mandatory field have been filled correctly
* so that it can proceed with the adding. If field has a error it will
* display a error.
*/
public void actionPerformed(ActionEvent e) {
// check if the option field are filled and correct before adding.
if(Firstnametext.getText().equalsIgnoreCase("")|| Phonenumbertext.getText().equalsIgnoreCase("( ) - ")){
JOptionPane.showMessageDialog (null, "Make sure the the First Name and Phone Number field are filled");
}
// prompt if you are sure you want to add these information into the table
else if (JOptionPane.showConfirmDialog(null, "Would you like to add these field to table?", "Request",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)
== JOptionPane.YES_OPTION)
{
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.addRow(new Object[] { Firstnametext.getText(), lastnametext.getText(), Phonenumbertext.getText(), Emailtext.getText()});
}
}
});
AddEntrybutton.setBounds(175, 253, 89, 23);
// add the add button to the entry panel
AddentryPanel.add(AddEntrybutton);
// a button the is use for clearing the field in the add entry panel
JButton ClearButton = new JButton("Clear");
ClearButton.setForeground(Color.RED);
ClearButton.addActionListener(new ActionListener() {
/*
* prompt you if you want to clear the first name,
* last name, phone number and email text field.
* if you select yes the field will be clear.
* if you select no the field will not be clear.
*/
public void actionPerformed(ActionEvent e) {
if (JOptionPane.showConfirmDialog(null, "Are you sure you want to clear the field?", "Request",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)
== JOptionPane.YES_OPTION)
{
Firstnametext.setText("");
lastnametext.setText("");
Phonenumbertext.setText("");
Emailtext.setText("");
}
else
{
//Go back to normal
}
}
});
ClearButton.setBounds(394, 253, 89, 23);
// add the clear button the entry panel
AddentryPanel.add(ClearButton);
// label tell that field is optional and doesn't need to be filled
JLabel Optionallabel1 = new JLabel("Optional");
Optionallabel1.setBounds(493, 200, 54, 14);
AddentryPanel.add(Optionallabel1);
// label tell that field is optional and doesn't need to be filled
JLabel Optionallabel2 = new JLabel("Optional");
Optionallabel2.setBounds(493, 104, 54, 14);
AddentryPanel.add(Optionallabel2);
// label that tell you that this field has to be filled
JLabel Mandatorylabel1 = new JLabel("Mandatory");
Mandatorylabel1.setForeground(Color.RED);
Mandatorylabel1.setBounds(493, 155, 79, 14);
AddentryPanel.add(Mandatorylabel1);
// label that tell you that this field has to be filled
JLabel Manatorylabel2 = new JLabel("Mandatory");
Manatorylabel2.setForeground(Color.RED);
Manatorylabel2.setBounds(493, 59, 64, 14);
AddentryPanel.add(Manatorylabel2);
// a menu bar for displaying the option to load contact, save contact,
// export contact as excel file and be able to close option
JMenuBar menuBar = new JMenuBar();
menuBar.setBounds(0, 0, 650, 21);
getContentPane().add(menuBar);
JMenu fileoption = new JMenu("File");
menuBar.add(fileoption);
JMenuItem loadcontact = new JMenuItem("Load Contact");
loadcontact.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
// add load contact file to menu
fileoption.add(loadcontact);
JMenuItem savecontact = new JMenuItem("Save Contact");
savecontact.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser filesave = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT File", ".txt", "text");
filesave.setFileFilter(filter);
int returnVal = filesave.showSaveDialog(Main.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
File file = filesave.getSelectedFile();
PrintWriter os = new PrintWriter(file +".txt");
for (int row = 0; row < table.getRowCount(); row++) {
for (int col = 0; col < table.getColumnCount(); col++) {
os.print(table.getColumnName(col));
os.print(": ");
os.println(table.getValueAt(row, col));
}
}
os.close();
System.out.println("Done!");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
// add a save contact file to menu
fileoption.add(savecontact);
JMenuItem close = new JMenuItem("Close");
close.addActionListener(new ActionListener() {
/*
* When selected the program will close.
*
*/
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
final JMenuItem mntmExportAsExcel = new JMenuItem("Export As Excel file");
mntmExportAsExcel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource() == mntmExportAsExcel){
JFileChooser fc = new JFileChooser();
int option = fc.showSaveDialog(Main.this);
if(option == JFileChooser.APPROVE_OPTION){
String filename = fc.getSelectedFile().getName();
String path = fc.getSelectedFile().getParentFile().getPath();
int len = filename.length();
String ext = "";
String file = "";
if(len > 4){
ext = filename.substring(len-4, len);
}
if(ext.equals(".xls")){
file = path + "\\" + filename;
}else{
file = path + "\\" + filename + ".xls";
}
toExcel(table, new File(file));
}
}
} catch (Exception z) {
z.printStackTrace();
}
}
});
fileoption.add(mntmExportAsExcel);
fileoption.add(close);
table.getColumnModel().getColumn(2).setPreferredWidth(124);
}
public void toExcel(JTable table, File file){
try{
TableModel model = table.getModel();
FileWriter excel = new FileWriter(file);
for(int i = 0; i < model.getColumnCount(); i++){
excel.write(model.getColumnName(i) + "\t");
}
excel.write("\n");
for(int i=0; i< model.getRowCount(); i++) {
for(int j=0; j < model.getColumnCount(); j++) {
excel.write(model.getValueAt(i,j).toString()+"\t");
}
excel.write("\n");
}
excel.close();
}catch(IOException e){ System.out.println(e); }
}
public static void main(String[] args) throws Exception {
Main frame = new Main();
frame.setTitle("Phone Book App");
frame.setSize(640, 400);
frame.setLocationRelativeTo(null); // Center the frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}