import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.ActionEvent; import java.awt.event.WindowEvent; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import java.util.Date; public class StateGui implements ActionListener{ private JFrame mainFrame; private JPanel controlPanel, editPanel; private CalendarEditor editor; private JButton save, exit; public StateGui(CalendarEditor edit){ editor = edit; } public void createGui(){ mainFrame = new JFrame("State Pattern Example"); Container content = mainFrame.getContentPane(); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); editPanel = new JPanel(); editPanel.setLayout(new BorderLayout()); JTable appointmentTable = new JTable(new StateTableModel((Appointment [])editor.getAppointments().toArray(new Appointment[1]))); editPanel.add(new JScrollPane(appointmentTable)); content.add(editPanel); controlPanel = new JPanel(); save = new JButton("Save Appointments"); exit = new JButton("Exit"); controlPanel.add(save); controlPanel.add(exit); content.add(controlPanel); save.addActionListener(this); exit.addActionListener(this); mainFrame.addWindowListener(new WindowCloseManager()); mainFrame.pack(); mainFrame.setVisible(true); } public void actionPerformed(ActionEvent evt){ Object originator = evt.getSource(); if (originator == save){ saveAppointments(); } else if (originator == exit){ exitApplication(); } } private class WindowCloseManager extends WindowAdapter{ public void windowClosing(WindowEvent evt){ exitApplication(); } } private void saveAppointments(){ editor.save(); } private void exitApplication(){ System.exit(0); } private class StateTableModel extends AbstractTableModel{ private final String [] columnNames = { "Appointment", "Contacts", "Location", "Start Date", "End Date" }; private Appointment [] data; public StateTableModel(Appointment [] appointments){ data = appointments; } public String getColumnName(int column){ return columnNames[column]; } public int getRowCount(){ return data.length; } public int getColumnCount(){ return columnNames.length; } public Object getValueAt(int row, int column){ Object value = null; switch(column){ case 0: value = data[row].getReason(); break; case 1: value = data[row].getContacts(); break; case 2: value = data[row].getLocation(); break; case 3: value = data[row].getStartDate(); break; case 4: value = data[row].getEndDate(); break; } return value; } public boolean isCellEditable(int row, int column){ return ((column == 0) || (column == 2)) ? true : false; } public void setValueAt(Object value, int row, int column){ switch(column){ case 0: data[row].setReason((String)value); editor.edit(); break; case 1: break; case 2: data[row].setLocation(new LocationImpl((String)value)); editor.edit(); break; case 3: break; case 4: break; } } } }