// ListApplet.java import java.applet.*; import java.awt.*; import java.util.*; public class ListApplet extends Applet implements Observer { static final String oStringChangedName = "changedName".intern(); private ObjectApplet oObjectApplet; private List oList; private Vector oVector; // CONSTRUCTORS public ListApplet ( ObjectApplet poObjectApplet ) { init(poObjectApplet); } // PUBLIC METHODS public Vector getVector ( ) { return oVector; } public boolean handleEvent ( Event poEvent ) { int i; if (poEvent.target == oList) { if (Event.LIST_SELECT == poEvent.id) { i = ((Integer)poEvent.arg).intValue(); setObject(getVector().elementAt(i)); } else if (Event.LIST_DESELECT == poEvent.id) oObjectApplet.setObject(null); } return super.handleEvent(poEvent); } public void init ( ObjectApplet poObjectApplet ) { super.init(); setLayout(new GridLayout(1,2,5,5)); oList = new List(); oObjectApplet = poObjectApplet; add(oList); add(oObjectApplet); setObject(null); } public void setVector ( Vector poVector ) throws NoSuchElementException { oObjectApplet.clear(); oList.clear(); oVector = poVector; for (Enumeration e = poVector.elements(); e.hasMoreElements(); ) oList.addItem(e.nextElement().toString()); } public void update ( Observable poObservable, Object poObject ) { String oString; if (oStringChangedName == poObject) { int i = getVector().indexOf(poObservable); oString = ((NamedObject)poObservable).getName().toString(); oList.replaceItem(oString,i); oList.select(i); } } // PROTECTED METHODS protected void addElement ( Object poObject ) { int i; getVector().addElement(poObject); i = oList.getItemCount(); oList.addItem(poObject.toString()); oList.makeVisible(i); oList.select(i); setObject(poObject); } protected void removeElementAt ( int pi ) { getVector().removeElementAt(pi); oList.delItem(pi); setObject(null); } protected void setObject ( Object poObject ) { Observable oObjectNew = (Observable)poObject; Observable oObjectOld = (Observable) oObjectApplet.getObject(); if (null != oObjectOld) oObjectOld.deleteObserver (this); if (null != oObjectNew) oObjectNew.addObserver (this); oObjectApplet.setObject(oObjectNew); } }