import javax.swing.JPanel; import javax.swing.JComboBox; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class SimObjectChooser extends JPanel { // OVERVIEW: SimObjectChooser manipulates the interface for selecting objects // and maintains state for the current object type. // // When clicking on a spot on the grid, it will be set to this class. // Rep: private Class selectedClass; private JComboBox combolist; private String[] classes; SimObjectChooser () // EFFECT: Initializes this to a SimObjectChooser with no classes. { selectedClass = null; classes = null; combolist = new JComboBox (); combolist.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { JComboBox cb = (JComboBox) e.getSource (); String classname = (String) cb.getSelectedItem (); setSelectedClass (classname); } } ); add (combolist); } public void addClass (String className) throws ClassNotFoundException // MODIFIES: this, the display panel // EFFECTS: If className is the name of a loadable Java class, sets the current object // to the type loaded by className. If className is not available, throws ClassNotFoundException. { Class newClass = Class.forName (className); // throws ClassNotFoundException if not found String [] oldclasses = classes; if (oldclasses == null) { classes = new String [1]; selectedClass = newClass; } else { classes = new String [oldclasses.length + 1]; } if (oldclasses != null) { for (int i = 0; i < oldclasses.length; i++) { classes[i] = oldclasses[i]; } } classes[classes.length - 1] = className; combolist.addItem (className); } public Class getSelectedClass() // EFFECTS: Returns the currently selected class (possibly null). { return selectedClass; } public void setSelectedClass (String classname) // MODIFIES: this // EFFECTS: Sets the currently selected class to the class associated // with the button press (described by the ActionEvent). { try { Class newClass = Class.forName (classname); selectedClass = newClass; } catch (java.lang.ClassNotFoundException ex) { System.err.println ("BUG: Selected class is not available: " + classname); ex.printStackTrace(); } } }