import jdsl.core.api.*; import java.awt.*; import java.awt.event.*; /** * @author Lucy Perry (lep) * @version JDSL 2 */ public class Triage extends Frame implements ActionListener,WindowListener{ /* ************************************ */ /* The members described in the lesson. */ /* ************************************ */ public Triage(){ super(); //b4.1 //create the PriorityQueue, passing a Comparator to its constructor pq_ = new jdsl.core.ref.ArrayHeap(new jdsl.core.ref.IntegerComparator()); //e4.1 setupPanel();//takes care of visual components } /** * This method is called when the "Add a patient" button is pressed * The patient's name is retrieved from the text field, and used as * as an element. The priority number is retrieved from the choice * widget, and used as a key. * Then the key and element are inserted, together, into the * PriorityQueue. */ //b4.2 protected void enterPatient(){ Object element = name_field_.getText(); int priority = java.lang.Integer.parseInt(priority_chooser_.getSelectedItem(), 10); //rememer that the key must be an Object, so make the int an Integer Object key = new Integer(priority); //Insert the data into the PriorityQueue pq_.insert(key, element); } //e4.2 /** * This method is called when the "Remove top patient" button is pressed. * The top-priority patient is removed from the PriorityQueue, and * patient's name displayed in a text field. */ //b4.3 protected void getTopPatient(){ Object output; //Remove the top-priority item from the PriorityQueue try{ output = pq_.removeMin(); } catch(EmptyContainerException ece){ output = "No patients in queue."; } top_priority_patient_.setText((String)output); } //e4.3 /* ************************************ */ /* Members not described in the lesson. */ /* ************************************ */ //JDSL PriorityQueue for keeping track of data private PriorityQueue pq_; //awt panel, holds all visual components private Panel panel_; //user enters a patient's name here private TextField name_field_; //a choice widget for selecting a triage priority private Choice priority_chooser_; //click this button to enter a patient + priority in the PriorityQueue private Button enter_patient_; //click this button to remove the top-priority patient private Button remove_top_patient_; //when the top patient is removed, the patient's name is displayed here private TextField top_priority_patient_; //click this button to quit private Button quit_; //takes care of visual components private void setupPanel(){ setLocation(50,50);//makes frame pop up in a nice place panel_ = new Panel(); add(panel_); name_field_ = new TextField(25); name_field_.setEditable(true); priority_chooser_ = new Choice(); priority_chooser_.add("1"); priority_chooser_.add("2"); priority_chooser_.add("3"); priority_chooser_.add("4"); priority_chooser_.add("5"); enter_patient_ = new Button("Add a patient to the PriorityQueue"); enter_patient_.addActionListener(this); remove_top_patient_ = new Button("Remove the top-priority patient"); remove_top_patient_.addActionListener(this); top_priority_patient_ = new TextField(25); top_priority_patient_.setEditable(false); quit_ = new Button("Quit"); quit_.addActionListener(this); addWindowListener(this); GridBagLayout layout = new GridBagLayout(); panel_.setLayout(layout); GridBagConstraints constraints = new GridBagConstraints(); constraints.gridy=GridBagConstraints.RELATIVE;//right below the last one constraints.gridx=1;//1 column constraints.anchor=GridBagConstraints.CENTER; constraints.ipady=2;//set vgap to 2 pixels. constraints.ipadx=3; panel_.add(new Label("Enter patient's name here:"), constraints); panel_.add(name_field_, constraints); panel_.add(new Label(""), constraints);//blank line panel_.add(new Label("Set the patient's triage priority here:"), constraints); panel_.add(new Label("(1 = most urgent, 5 = least urgent)"), constraints); panel_.add(priority_chooser_, constraints); panel_.add(new Label(""), constraints);//blank line panel_.add(enter_patient_, constraints); panel_.add(new Label(""), constraints);//blank line panel_.add(remove_top_patient_, constraints); panel_.add(new Label(""), constraints);//blank line panel_.add(new Label("Ready to treat patient:"), constraints); panel_.add(top_priority_patient_, constraints); panel_.add(new Label(""), constraints);//blank line panel_.add(new Label(""), constraints);//blank line panel_.add(new Label(""), constraints);//blank line panel_.add(quit_, constraints); validate(); setVisible(true); panel_.validate(); panel_.setVisible(true); pack(); } //handles button presses public void actionPerformed(ActionEvent e){ if(e.getSource() == enter_patient_){ enterPatient(); } else if (e.getSource() == remove_top_patient_){ getTopPatient(); } else if (e.getSource() == quit_){ System.exit(0); } } public static void main(String args[]){ Triage t = new Triage(); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) {System.exit(0);} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }