import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; public class EmployeeUI extends JFrame implements ActionListener, ItemListener, ListSelectionListener { private JLabel statusLabel; private JComboBox employeeTypeChoice; private JTextField employeeNameField, departmentNameField, supportAreaNameField, schoolNameField, majorNameField, yearField; private JLabel professorLabel, studentLabel, supportStaffLabel; private JLabel departmentNameLabel, supportAreaLabel, schoolNameLabel, majorNameLabel, yearLabel, tenureLabel, unionLabel; private JCheckBox tenureCheckbox, unionCheckbox; private JButton addButton; private JList employeeList; private JTextField hoursField, payRateField; private JButton updateButton; private JTextArea infoTextArea; private EmployeeManager employeeManager; public EmployeeUI() { super("Java Application"); setSize(800, 600); Container content = getContentPane(); employeeManager = new EmployeeManager(); content.setLayout(new BorderLayout()); statusLabel = new JLabel("Status: "); statusLabel.setBackground(new Color(190, 190, 190)); content.add(statusLabel, BorderLayout.SOUTH); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new GridLayout(1, 2)); content.add(mainPanel, BorderLayout.CENTER); JPanel addUserPanel = new JPanel(); addUserPanel.setLayout(new BorderLayout()); addUserPanel.setBackground(new Color(230, 230, 230)); JPanel labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(10, 1)); labelPanel.add(new JLabel("Type:")); labelPanel.add(new JLabel("Name:")); professorLabel = new JLabel("Professor:"); labelPanel.add(professorLabel); labelPanel.add(new JPanel()); supportStaffLabel = new JLabel("Support Staff:"); labelPanel.add(supportStaffLabel); labelPanel.add(new JPanel()); studentLabel = new JLabel("Student:"); labelPanel.add(studentLabel); labelPanel.add(new JPanel()); labelPanel.add(new JPanel()); labelPanel.add(new JPanel()); addUserPanel.add(labelPanel, BorderLayout.WEST); JPanel fieldPanel = new JPanel(); fieldPanel.setLayout(new GridLayout(10, 1)); JPanel panel1 = new JPanel(); panel1.setLayout(new FlowLayout(FlowLayout.LEFT)); employeeTypeChoice = new JComboBox(); employeeTypeChoice.addItem("Professor"); employeeTypeChoice.addItem("Support Staff"); employeeTypeChoice.addItem("Student"); employeeTypeChoice.setMaximumRowCount(3); employeeTypeChoice.addItemListener(this); panel1.add(employeeTypeChoice); panel1.add(new JPanel()); fieldPanel.add(panel1); JPanel panel2 = new JPanel(); panel2.setLayout(new FlowLayout(FlowLayout.LEFT)); employeeNameField = new JTextField(20); panel2.add(employeeNameField); fieldPanel.add(panel2); JPanel panel3 = new JPanel(); panel3.setLayout(new FlowLayout(FlowLayout.LEFT)); departmentNameLabel = new JLabel("Department:"); panel3.add(departmentNameLabel); departmentNameField = new JTextField(20); panel3.add(departmentNameField); fieldPanel.add(panel3); JPanel panel4 = new JPanel(); panel4.setLayout(new FlowLayout(FlowLayout.LEFT)); tenureLabel = new JLabel("Tenure"); panel4.add(tenureLabel); tenureCheckbox = new JCheckBox(); panel4.add(tenureCheckbox); fieldPanel.add(panel4); JPanel panel5 = new JPanel(); panel5.setLayout(new FlowLayout(FlowLayout.LEFT)); supportAreaLabel = new JLabel("Support Area:"); panel5.add(supportAreaLabel); supportAreaNameField = new JTextField(20); panel5.add(supportAreaNameField); fieldPanel.add(panel5); JPanel panel6 = new JPanel(); panel6.setLayout(new FlowLayout(FlowLayout.LEFT)); unionLabel = new JLabel("Union"); panel6.add(unionLabel); unionCheckbox = new JCheckBox(); panel6.add(unionCheckbox); fieldPanel.add(panel6); JPanel panel7 = new JPanel(); panel7.setLayout(new FlowLayout(FlowLayout.LEFT)); schoolNameLabel = new JLabel("School:"); panel7.add(schoolNameLabel); schoolNameField = new JTextField(20); panel7.add(schoolNameField); fieldPanel.add(panel7); JPanel panel8 = new JPanel(); panel8.setLayout(new FlowLayout(FlowLayout.LEFT)); majorNameLabel = new JLabel("Major:"); panel8.add(majorNameLabel); majorNameField = new JTextField(20); panel8.add(majorNameField); fieldPanel.add(panel8); JPanel panel9 = new JPanel(); panel9.setLayout(new FlowLayout(FlowLayout.LEFT)); yearLabel = new JLabel("Year:"); panel9.add(yearLabel); yearField = new JTextField(20); panel9.add(yearField); fieldPanel.add(panel9); JPanel panel10 = new JPanel(); panel10.setLayout(new FlowLayout(FlowLayout.LEFT)); addButton = new JButton("Add"); addButton.addActionListener(this); panel10.add(addButton); fieldPanel.add(panel10); addUserPanel.add(fieldPanel, BorderLayout.CENTER); mainPanel.add(addUserPanel); JPanel payUserPanel = new JPanel(); payUserPanel.setLayout(new BorderLayout()); payUserPanel.setBackground(new Color(215, 215, 215)); payUserPanel.add(new JLabel("Employees:"), BorderLayout.NORTH); JPanel panel11 = new JPanel(); panel11.setLayout(new GridLayout(2, 1)); employeeList = new JList(); JScrollPane jsp = new JScrollPane(employeeList); employeeList.addListSelectionListener(this); panel11.add(jsp); JPanel panel12 = new JPanel(); panel12.setLayout(new GridLayout(3, 1)); JPanel panel13 = new JPanel(); panel13.setLayout(new FlowLayout(FlowLayout.LEFT)); panel13.add(new JLabel("Hours Worked:")); hoursField = new JTextField(20); panel13.add(hoursField); panel12.add(panel13); JPanel panel14 = new JPanel(); panel14.setLayout(new FlowLayout(FlowLayout.LEFT)); panel14.add(new JLabel("Pay Rate:")); payRateField = new JTextField(20); panel14.add(payRateField); panel12.add(panel14); JPanel panel15 = new JPanel(); updateButton = new JButton("Update"); updateButton.addActionListener(this); panel15.add(updateButton); panel12.add(panel15); panel11.add(panel12); payUserPanel.add(panel11, BorderLayout.CENTER); infoTextArea = new JTextArea(5, 20); infoTextArea.setEditable(false); payUserPanel.add(infoTextArea, BorderLayout.SOUTH); mainPanel.add(payUserPanel); WindowListener wndCloser = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(wndCloser); setVisible(true); enableProfessor(true); enableSupportStaff(false); enableStudent(false); } private void refreshUI() { // redraw list and its contents (= names of employees) Hashtable h = employeeManager.getEmployees(); String[] names = new String[h.size()]; int i = 0; for (Enumeration e = h.keys(); e.hasMoreElements(); ) { names[i] = (String)e.nextElement(); i++; } employeeList.setListData(names); // clear input fields employeeNameField.setText(""); departmentNameField.setText(""); tenureCheckbox.setSelected(false); schoolNameField.setText(""); majorNameField.setText(""); yearField.setText(""); supportAreaNameField.setText(""); unionCheckbox.setSelected(false); hoursField.setText(""); payRateField.setText(""); infoTextArea.setText(""); statusLabel.setText(""); } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == addButton) { Payable p = null; String name = employeeNameField.getText(); if (name.equals("")) { statusLabel.setText("ERROR: Please enter a name"); return; } String type = (String)employeeTypeChoice.getSelectedItem(); if (type.equals("Professor")) { if (departmentNameField.getText().equals("")) { statusLabel.setText("ERROR: Please enter a department"); return; } p = new Professor(name, departmentNameField.getText(), tenureCheckbox.isSelected()); } else if (type.equals("Support Staff")) { if (supportAreaNameField.getText().equals("")) { statusLabel.setText("ERROR: Please enter a Support Area"); return; } p = new SupportStaff(name, supportAreaNameField.getText(), unionCheckbox.isSelected()); } else if (type.equals("Student")) { if (schoolNameField.getText().equals("")) { statusLabel.setText("ERROR: Please enter a school"); return; } else if (majorNameField.getText().equals("")) { statusLabel.setText("ERROR: Please enter a major"); return; } int year = -1; try { year = Integer.parseInt(yearField.getText()); } catch (Exception e2) { } if (year < 0) { statusLabel.setText("ERROR: Please enter a valid year"); return; } p = new Student(name, year, schoolNameField.getText(), majorNameField.getText()); } try { employeeManager.addEmployee(p); } catch (Exception e2) { statusLabel.setText("ERROR: " + e2.getMessage()); return; } statusLabel.setText(""); refreshUI(); } else if (source == updateButton) { if (employeeList.getSelectedIndex() == -1) { statusLabel.setText("ERROR: Please select an employee"); return; } String name = (String)employeeList.getSelectedValue(); double hours = -1; try { hours = Double.parseDouble(hoursField.getText()); } catch (Exception e2) { statusLabel.setText("ERROR: Please enter valid Hours Worked"); return; } if (!payRateField.getText().equals("")) { float pay = -1; try { pay = Float.parseFloat(payRateField.getText()); } catch (Exception e2) { statusLabel.setText("ERROR: Please enter valid Pay Rate"); return; } try { employeeManager.payEmployee(name, hours, pay); } catch (Exception e2) { statusLabel.setText("ERROR: " + e2.getMessage()); return; } } else { try { employeeManager.payEmployee(name, hours); } catch (Exception e2) { statusLabel.setText("ERROR: " + e2.getMessage()); return; } } refreshUI(); } } public void itemStateChanged(ItemEvent e) { if (e.getSource() == employeeTypeChoice) { String type = (String)employeeTypeChoice.getSelectedItem(); if (type.equals("Professor")) { enableProfessor(true); enableStudent(false); enableSupportStaff(false); } else if (type.equals("Support Staff")) { enableProfessor(false); enableStudent(false); enableSupportStaff(true); } else if (type.equals("Student")) { enableProfessor(false); enableStudent(true); enableSupportStaff(false); } } } public void valueChanged(ListSelectionEvent e) { String s = (String)employeeList.getSelectedValue(); Hashtable h = employeeManager.getEmployees(); if ((s == null) || (!h.containsKey(s))) { refreshUI(); return; } Payable p = (Payable)h.get(s); infoTextArea.setText(p + "\n" + p.getAccount()); } private void enableProfessor(boolean b) { professorLabel.setVisible(b); departmentNameField.setVisible(b); tenureCheckbox.setVisible(b); departmentNameLabel.setVisible(b); tenureLabel.setVisible(b); } private void enableStudent(boolean b) { studentLabel.setVisible(b); schoolNameField.setVisible(b); majorNameField.setVisible(b); yearField.setVisible(b); schoolNameLabel.setVisible(b); majorNameLabel.setVisible(b); yearLabel.setVisible(b); } private void enableSupportStaff(boolean b) { supportStaffLabel.setVisible(b); supportAreaNameField.setVisible(b); unionCheckbox.setVisible(b); supportAreaLabel.setVisible(b); unionLabel.setVisible(b); } public static void main(String[] args) { EmployeeUI employeeUI = new EmployeeUI(); } }