home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-05-08 | 10.0 KB | 358 lines |
- /*
- PC Plus sample Java program. Show how you might extend Vectors.
- Also illustrates the use of Stacks.
- */
-
- import java.awt.*;
- import java.util.*; // !! Remember to import this
-
- public class VectorPlusFrame extends Frame {
-
- // At startup:
- // Create a new VectorPlus object
- MPVector Vec = new MPVector();
-
- void FindBtn_Clicked(Event event) {
- // Given an MP's job-title, find and display the name of the
- // person or persons in that position
-
- Vector matches;
- String s, jobtitle = JobNameTF.getText();
-
- if (jobtitle.equals(""))
- MsgDlg("Error", "You must specify a job title!");
- else {
- matches = Vec.findAll(jobtitle);
- if (matches.isEmpty())
- s = "Nobody seems to be doing that job!";
- else
- {
- s = jobtitle + " - this post is occupied by:\n";
- for (Enumeration e = matches.elements(); e.hasMoreElements(); )
- // Cast element to MP to retrieve name
- s = s + ((MP)e.nextElement()).name + "\n";
- }
- MsgDlg("MP Information", s);
- }
- }
-
- void RevBtn_Clicked(Event event) {
- // Reverse order of Vector items
- Vec.reverse();
- showMPs(list1, Vec);
- }
-
- void ClearBtn_Clicked(Event event) {
- // deletes all objects in Vector
- // !! uses methods:
- // !! isEmpty()
- // !! removeAllElements()
- if (Vec.isEmpty())
- MsgDlg( "Error", "Vector is already empty!" );
- else
- {
- Vec.removeAllElements();
- showMPs(list1, Vec);
- }
- }
-
- void LastBtn_Clicked(Event event) {
- // show last item in Vector
- // !! uses methods:
- // !! isEmpty()
- // !! lastElement()
- if (Vec.isEmpty())
- MsgDlg( "Error", "Vector is empty!" );
- else
- MsgDlg( "Last item in the Vector", nameAndPos((MP)Vec.lastElement()));
- }
-
- void FirstBtn_Clicked(Event event) {
- // show first item in Vector
- // !! uses methods:
- // !! isEmpty()
- // !! firstElement()
-
- if (Vec.isEmpty())
- MsgDlg( "Error", "Vector is empty!" );
- else
- MsgDlg( "First item in the Vector", nameAndPos((MP)Vec.firstElement()));
- }
-
-
- void AddBtn_Clicked(Event event) {
- // Create and add a new record
- // !! uses method:
- // !! addElement( Object )
- if (textFieldsOK())
- Vec.addElement( new MP( NameTF.getText(), PosTF.getText() ) );
- showMPs(list1, Vec);
- }
-
- void DelBtn_Clicked(Event event) {
- // !! uses method:
- // !! removeElementAt( index )
- // to delete object from index in Vector
-
- // the selected item in the list box provides an index
- int i = list1.getSelectedIndex();
- if (i < 0)
- MsgDlg( "Error", "No item was selected!" );
- else
- {
- Vec.removeElementAt(i);
- showMPs(list1, Vec);
- // after deletion select item at index of deleted item
- // or at 1 index lower if the final item was deleted
- if (i == (list1.countItems()) )
- list1.select(i-1);
- else
- list1.select(i);
- }
- }
-
-
-
- String nameAndPos( MP anMP ) {
- // return a string to display in list box
- return anMP.name + ", " + anMP.position;
- }
-
- void MsgDlg( String title, String msg ) {
- // generic message: emsg is the string displayed
- MsgDlg md = new MsgDlg(this, false);
- md.setTitle( title );
- md.textAreaMsg.appendText(msg);
- md.show();
- }
-
- boolean textFieldsOK() {
- // check user has entered data to create a new record
- // if OK return true, if not display error message and return false
- if ( ( "".equals(NameTF.getText()) ) ||
- ( "".equals(PosTF.getText()) ) )
- {
- MsgDlg( "Error", "You must enter a name and a position!" );
- return false;
- }
- else return true;
- }
-
-
- void showMPs( List l, VectorPlus v) {
- MP anMP;
- // Enumerate through the elements in Vector v and add them,
- // as strings, to the List l
- l.clear();
- for (Enumeration e = v.elements(); e.hasMoreElements(); ) {
- // Cast element to MP to retrieve name and position fields
- anMP = (MP)e.nextElement();
- l.addItem(nameAndPos(anMP));
- }
- }
-
- void CreateBtn_Clicked(Event event) {
- // generate and add some records automatically
- Vec.addElement(new MP( "Roger Dog", "Minister of Happiness" ));
- Vec.addElement(new MP( "Delores McMasters", "Minister of Lies" ));
- Vec.addElement(new MP( "Tessie O'Gritpipe", "Minister of Weather" ));
- Vec.addElement(new MP( "Fiona Tarradiddle", "Minister of Sympathy" ));
- Vec.addElement(new MP( "Dennis Arktripe", "Minister of Lies" ));
- Vec.addElement(new MP( "Ratford Snivell", "Under-secretary of Folly" ));
- Vec.addElement(new MP( "Andrew Smithers", "Minister of Lies" ));
- showMPs(list1, Vec);
- }
-
-
-
- public VectorPlusFrame() {
-
- //{{INIT_CONTROLS
- setLayout(null);
- addNotify();
- resize(insets().left + insets().right + 521,insets().top + insets().bottom + 317);
- list1 = new java.awt.List(0,false);
- add(list1);
- list1.reshape(insets().left + 36,insets().top + 12,242,136);
- NameTF = new java.awt.TextField();
- NameTF.reshape(insets().left + 132,insets().top + 180,143,22);
- add(NameTF);
- PosTF = new java.awt.TextField();
- PosTF.reshape(insets().left + 132,insets().top + 216,145,20);
- add(PosTF);
- label1 = new java.awt.Label("Name:");
- label1.reshape(insets().left + 36,insets().top + 180,48,24);
- add(label1);
- label2 = new java.awt.Label("Position:");
- label2.reshape(insets().left + 24,insets().top + 216,60,24);
- add(label2);
- AddBtn = new java.awt.Button("&Add New Record");
- AddBtn.reshape(insets().left + 132,insets().top + 252,149,23);
- add(AddBtn);
- CreateBtn = new java.awt.Button("&Create some Records");
- CreateBtn.reshape(insets().left + 132,insets().top + 276,149,20);
- add(CreateBtn);
- DelBtn = new java.awt.Button("&Delete");
- DelBtn.reshape(insets().left + 300,insets().top + 12,104,25);
- add(DelBtn);
- FirstBtn = new java.awt.Button("Show &First");
- FirstBtn.reshape(insets().left + 300,insets().top + 48,104,25);
- add(FirstBtn);
- LastBtn = new java.awt.Button("Show &Last");
- LastBtn.reshape(insets().left + 300,insets().top + 84,104,24);
- add(LastBtn);
- ClearBtn = new java.awt.Button("Clear &Vector");
- ClearBtn.reshape(insets().left + 300,insets().top + 120,104,24);
- add(ClearBtn);
- RevBtn = new java.awt.Button("&Reverse");
- RevBtn.reshape(insets().left + 300,insets().top + 156,104,24);
- add(RevBtn);
- FindBtn = new java.awt.Button("&Who Does This Job...?");
- FindBtn.reshape(insets().left + 300,insets().top + 192,168,24);
- add(FindBtn);
- JobNameTF = new java.awt.TextField();
- JobNameTF.reshape(insets().left + 300,insets().top + 228,168,24);
- add(JobNameTF);
- setTitle("A Parliamentary Java Application");
- //}}
-
- //{{INIT_MENUS
- //}}
- }
-
- public VectorPlusFrame(String title) {
- this();
- setTitle(title);
- }
-
- public synchronized void show() {
- move(50, 50);
- super.show();
- }
-
- public boolean handleEvent(Event event) {
- if (event.id == Event.WINDOW_DESTROY) {
- hide(); // hide the Frame
- dispose(); // free the system resources
- System.exit(0); // close the application
- return true;
- }
- if (event.target == CreateBtn && event.id == Event.ACTION_EVENT) {
- CreateBtn_Clicked(event);
- return true;
- }
- if (event.target == AddBtn && event.id == Event.ACTION_EVENT) {
- AddBtn_Clicked(event);
- return true;
- }
- if (event.target == DelBtn && event.id == Event.ACTION_EVENT) {
- DelBtn_Clicked(event);
- return true;
- }
- if (event.target == FirstBtn && event.id == Event.ACTION_EVENT) {
- FirstBtn_Clicked(event);
- return true;
- }
- if (event.target == LastBtn && event.id == Event.ACTION_EVENT) {
- LastBtn_Clicked(event);
- return true;
- }
- if (event.target == ClearBtn && event.id == Event.ACTION_EVENT) {
- ClearBtn_Clicked(event);
- return true;
- }
- if (event.target == RevBtn && event.id == Event.ACTION_EVENT) {
- RevBtn_Clicked(event);
- return true;
- }
- if (event.target == FindBtn && event.id == Event.ACTION_EVENT) {
- FindBtn_Clicked(event);
- return true;
- }
- return super.handleEvent(event);
- }
-
- public boolean action(Event event, Object arg) {
- if (event.target instanceof MenuItem) {
- }
- return super.action(event, arg);
- }
-
- static public void main(String args[]) {
- (new VectorPlusFrame()).show();
- }
-
- //{{DECLARE_CONTROLS
- java.awt.List list1;
- java.awt.TextField NameTF;
- java.awt.TextField PosTF;
- java.awt.Label label1;
- java.awt.Label label2;
- java.awt.Button AddBtn;
- java.awt.Button CreateBtn;
- java.awt.Button DelBtn;
- java.awt.Button FirstBtn;
- java.awt.Button LastBtn;
- java.awt.Button ClearBtn;
- java.awt.Button RevBtn;
- java.awt.Button FindBtn;
- java.awt.TextField JobNameTF;
- //}}
-
- //{{DECLARE_MENUS
- //}}
- }
-
- // -------- OUR CLASSES
- // class MP
- class MP {
- String name;
- String position;
-
- MP( String aName, String aPosition ){
- this.name = aName;
- this.position = aPosition;
- }
- }
-
- // class VectorPlus
- class VectorPlus extends Vector {
- VectorPlus() {
- super();
- }
-
- void reverse() {
- // copy elements from Vector to a Stack
- // then rebuild Vector by popping the elements back off the Stack
- // Hey-presto! You've reversed the Vector!
- Stack stk = new Stack();
- for (Enumeration e = this.elements(); e.hasMoreElements(); )
- stk.push(e.nextElement());
- this.removeAllElements();
- while (!stk.empty())
- this.addElement( stk.pop()) ;
- }
- }
-
- // class MPVector
- class MPVector extends VectorPlus {
- MPVector() {
- super();
- }
-
- VectorPlus findAll(String s) {
- // locate all occurences of s in MP Vector
- MP anMP;
- VectorPlus v = new VectorPlus();
-
- for (Enumeration e = this.elements(); e.hasMoreElements(); ) {
- anMP = (MP)e.nextElement();
- if (anMP.position.equalsIgnoreCase(s))
- v.addElement(anMP);
- }
- return v;
- }
- }
-
-
-