home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD 12 / 12_pcplus_supercd.iso / Pcplus / JAVA / VECTORPLUS / VECTORPLUSFRAME.JAVA < prev   
Encoding:
Java Source  |  1997-05-08  |  10.0 KB  |  358 lines

  1. /*
  2.     PC Plus sample Java program. Show how you might extend Vectors.
  3.     Also illustrates the use of Stacks.
  4. */
  5.  
  6. import java.awt.*;
  7. import java.util.*; // !! Remember to import this
  8.  
  9. public class VectorPlusFrame extends Frame {
  10.  
  11.     // At startup:
  12.     // Create a new VectorPlus object
  13.     MPVector Vec = new MPVector();
  14.  
  15.     void FindBtn_Clicked(Event event) {
  16.         // Given an MP's job-title, find and display the name of the
  17.         // person or persons in that position
  18.         
  19.         Vector matches;
  20.         String s, jobtitle = JobNameTF.getText();
  21.  
  22.         if (jobtitle.equals(""))
  23.             MsgDlg("Error", "You must specify a job title!");
  24.         else {
  25.             matches = Vec.findAll(jobtitle);
  26.             if (matches.isEmpty())
  27.                 s = "Nobody seems to be doing that job!";
  28.             else
  29.             {
  30.               s = jobtitle + " - this post is occupied by:\n";
  31.               for (Enumeration e = matches.elements(); e.hasMoreElements(); )
  32.               // Cast element to MP to retrieve name
  33.                  s = s + ((MP)e.nextElement()).name + "\n";
  34.             }
  35.             MsgDlg("MP Information", s);
  36.         }
  37.     }
  38.  
  39.     void RevBtn_Clicked(Event event) {
  40.         // Reverse order of Vector items
  41.         Vec.reverse();
  42.         showMPs(list1, Vec);
  43.     }
  44.  
  45.     void ClearBtn_Clicked(Event event) {
  46.         // deletes all objects in Vector
  47.         // !! uses methods:
  48.         // !! isEmpty()
  49.         // !! removeAllElements()
  50.         if (Vec.isEmpty())
  51.            MsgDlg( "Error", "Vector is already empty!" );
  52.         else
  53.         {
  54.             Vec.removeAllElements();
  55.             showMPs(list1, Vec);
  56.         }
  57.     }
  58.  
  59.     void LastBtn_Clicked(Event event) {
  60.         // show last item in Vector
  61.         // !! uses methods:
  62.         // !! isEmpty()
  63.         // !! lastElement()
  64.         if (Vec.isEmpty())
  65.            MsgDlg( "Error", "Vector is empty!" );
  66.         else
  67.            MsgDlg( "Last item in the Vector", nameAndPos((MP)Vec.lastElement()));
  68.     }
  69.  
  70.     void FirstBtn_Clicked(Event event) {
  71.         // show first item in Vector
  72.         // !! uses methods:
  73.         // !! isEmpty()
  74.         // !! firstElement()
  75.  
  76.         if (Vec.isEmpty())
  77.            MsgDlg( "Error", "Vector is empty!" );
  78.         else
  79.            MsgDlg( "First item in the Vector", nameAndPos((MP)Vec.firstElement()));
  80.     }
  81.  
  82.  
  83.     void AddBtn_Clicked(Event event) {
  84.         // Create and add a new record
  85.         // !! uses method:
  86.         // !! addElement( Object )
  87.         if (textFieldsOK())
  88.             Vec.addElement( new MP( NameTF.getText(), PosTF.getText() ) );
  89.             showMPs(list1, Vec);
  90.     }
  91.  
  92.     void DelBtn_Clicked(Event event) {
  93.         // !! uses method:
  94.         // !! removeElementAt( index )
  95.         // to delete object from index in Vector
  96.  
  97.         // the selected item in the list box provides an index
  98.         int i = list1.getSelectedIndex();
  99.         if (i < 0)
  100.           MsgDlg( "Error", "No item was selected!" );
  101.         else
  102.         {
  103.           Vec.removeElementAt(i);
  104.           showMPs(list1, Vec);
  105.           // after deletion select item at index of deleted item
  106.           // or at 1 index lower if the final item was deleted
  107.           if (i == (list1.countItems()) )
  108.             list1.select(i-1);
  109.           else
  110.             list1.select(i);
  111.         }
  112.     }
  113.  
  114.  
  115.  
  116.     String nameAndPos( MP anMP ) {
  117.         // return a string to display in list box
  118.          return anMP.name + ", " + anMP.position;
  119.     }
  120.  
  121.     void MsgDlg( String title, String msg ) {
  122.         // generic message: emsg is the string displayed
  123.         MsgDlg md = new MsgDlg(this, false);
  124.         md.setTitle( title );
  125.         md.textAreaMsg.appendText(msg);
  126.         md.show();
  127.     }
  128.  
  129.     boolean textFieldsOK() {
  130.         // check user has entered data to create a new record
  131.         // if OK return true, if not display error message and return false
  132.         if ( ( "".equals(NameTF.getText()) ) ||
  133.              ( "".equals(PosTF.getText())  )  )
  134.              {
  135.                 MsgDlg( "Error", "You must enter a name and a position!" );
  136.                 return false;
  137.              }
  138.         else return true;
  139.     }
  140.  
  141.  
  142.     void showMPs( List l, VectorPlus v) {
  143.         MP anMP;
  144.         // Enumerate through the elements in Vector v and add them,
  145.         // as strings, to the List l
  146.         l.clear();
  147.         for (Enumeration e = v.elements(); e.hasMoreElements(); ) {
  148.             // Cast element to MP to retrieve name and position fields
  149.             anMP = (MP)e.nextElement();
  150.             l.addItem(nameAndPos(anMP));
  151.         }
  152.     }
  153.  
  154.     void CreateBtn_Clicked(Event event) {
  155.         // generate and add some records automatically
  156.         Vec.addElement(new MP( "Roger Dog", "Minister of Happiness" ));
  157.         Vec.addElement(new MP( "Delores McMasters", "Minister of Lies" ));        
  158.         Vec.addElement(new MP( "Tessie O'Gritpipe", "Minister of Weather" ));
  159.         Vec.addElement(new MP( "Fiona Tarradiddle", "Minister of Sympathy" ));
  160.         Vec.addElement(new MP( "Dennis Arktripe", "Minister of Lies" ));
  161.         Vec.addElement(new MP( "Ratford Snivell", "Under-secretary of Folly" ));
  162.         Vec.addElement(new MP( "Andrew Smithers", "Minister of Lies" ));        
  163.         showMPs(list1, Vec);
  164.     }
  165.  
  166.  
  167.  
  168.     public VectorPlusFrame() {
  169.  
  170.         //{{INIT_CONTROLS
  171.         setLayout(null);
  172.         addNotify();
  173.         resize(insets().left + insets().right + 521,insets().top + insets().bottom + 317);
  174.         list1 = new java.awt.List(0,false);
  175.         add(list1);
  176.         list1.reshape(insets().left + 36,insets().top + 12,242,136);
  177.         NameTF = new java.awt.TextField();
  178.         NameTF.reshape(insets().left + 132,insets().top + 180,143,22);
  179.         add(NameTF);
  180.         PosTF = new java.awt.TextField();
  181.         PosTF.reshape(insets().left + 132,insets().top + 216,145,20);
  182.         add(PosTF);
  183.         label1 = new java.awt.Label("Name:");
  184.         label1.reshape(insets().left + 36,insets().top + 180,48,24);
  185.         add(label1);
  186.         label2 = new java.awt.Label("Position:");
  187.         label2.reshape(insets().left + 24,insets().top + 216,60,24);
  188.         add(label2);
  189.         AddBtn = new java.awt.Button("&Add New Record");
  190.         AddBtn.reshape(insets().left + 132,insets().top + 252,149,23);
  191.         add(AddBtn);
  192.         CreateBtn = new java.awt.Button("&Create some Records");
  193.         CreateBtn.reshape(insets().left + 132,insets().top + 276,149,20);
  194.         add(CreateBtn);
  195.         DelBtn = new java.awt.Button("&Delete");
  196.         DelBtn.reshape(insets().left + 300,insets().top + 12,104,25);
  197.         add(DelBtn);
  198.         FirstBtn = new java.awt.Button("Show &First");
  199.         FirstBtn.reshape(insets().left + 300,insets().top + 48,104,25);
  200.         add(FirstBtn);
  201.         LastBtn = new java.awt.Button("Show &Last");
  202.         LastBtn.reshape(insets().left + 300,insets().top + 84,104,24);
  203.         add(LastBtn);
  204.         ClearBtn = new java.awt.Button("Clear &Vector");
  205.         ClearBtn.reshape(insets().left + 300,insets().top + 120,104,24);
  206.         add(ClearBtn);
  207.         RevBtn = new java.awt.Button("&Reverse");
  208.         RevBtn.reshape(insets().left + 300,insets().top + 156,104,24);
  209.         add(RevBtn);
  210.         FindBtn = new java.awt.Button("&Who Does This Job...?");
  211.         FindBtn.reshape(insets().left + 300,insets().top + 192,168,24);
  212.         add(FindBtn);
  213.         JobNameTF = new java.awt.TextField();
  214.         JobNameTF.reshape(insets().left + 300,insets().top + 228,168,24);
  215.         add(JobNameTF);
  216.         setTitle("A Parliamentary Java Application");
  217.         //}}
  218.  
  219.         //{{INIT_MENUS
  220.         //}}
  221.     }
  222.  
  223.     public VectorPlusFrame(String title) {
  224.         this();
  225.         setTitle(title);
  226.     }
  227.  
  228.     public synchronized void show() {
  229.         move(50, 50);
  230.         super.show();
  231.     }
  232.  
  233.     public boolean handleEvent(Event event) {
  234.         if (event.id == Event.WINDOW_DESTROY) {
  235.             hide();         // hide the Frame
  236.             dispose();      // free the system resources
  237.             System.exit(0); // close the application
  238.             return true;
  239.         }
  240.         if (event.target == CreateBtn && event.id == Event.ACTION_EVENT) {
  241.             CreateBtn_Clicked(event);
  242.             return true;
  243.         }
  244.         if (event.target == AddBtn && event.id == Event.ACTION_EVENT) {
  245.             AddBtn_Clicked(event);
  246.             return true;
  247.         }
  248.         if (event.target == DelBtn && event.id == Event.ACTION_EVENT) {
  249.             DelBtn_Clicked(event);
  250.             return true;
  251.         }
  252.         if (event.target == FirstBtn && event.id == Event.ACTION_EVENT) {
  253.             FirstBtn_Clicked(event);
  254.             return true;
  255.         }
  256.         if (event.target == LastBtn && event.id == Event.ACTION_EVENT) {
  257.             LastBtn_Clicked(event);
  258.             return true;
  259.         }
  260.         if (event.target == ClearBtn && event.id == Event.ACTION_EVENT) {
  261.             ClearBtn_Clicked(event);
  262.             return true;
  263.         }
  264.         if (event.target == RevBtn && event.id == Event.ACTION_EVENT) {
  265.             RevBtn_Clicked(event);
  266.             return true;
  267.         }
  268.         if (event.target == FindBtn && event.id == Event.ACTION_EVENT) {
  269.             FindBtn_Clicked(event);
  270.             return true;
  271.         }
  272.         return super.handleEvent(event);
  273.     }
  274.  
  275.     public boolean action(Event event, Object arg) {
  276.         if (event.target instanceof MenuItem) {            
  277.         }
  278.         return super.action(event, arg);
  279.     }
  280.  
  281.     static public void main(String args[]) {
  282.         (new VectorPlusFrame()).show();
  283.     }
  284.  
  285.     //{{DECLARE_CONTROLS
  286.     java.awt.List list1;
  287.     java.awt.TextField NameTF;
  288.     java.awt.TextField PosTF;
  289.     java.awt.Label label1;
  290.     java.awt.Label label2;
  291.     java.awt.Button AddBtn;
  292.     java.awt.Button CreateBtn;
  293.     java.awt.Button DelBtn;
  294.     java.awt.Button FirstBtn;
  295.     java.awt.Button LastBtn;
  296.     java.awt.Button ClearBtn;
  297.     java.awt.Button RevBtn;
  298.     java.awt.Button FindBtn;
  299.     java.awt.TextField JobNameTF;
  300.     //}}
  301.  
  302.     //{{DECLARE_MENUS
  303.     //}}
  304. }
  305.  
  306. // -------- OUR CLASSES 
  307. // class MP
  308. class MP {
  309.     String name;
  310.     String position;
  311.  
  312.     MP( String aName, String aPosition ){
  313.         this.name = aName;
  314.         this.position = aPosition;
  315.     }
  316. }
  317.  
  318. // class VectorPlus
  319. class VectorPlus extends Vector {
  320.     VectorPlus() {
  321.         super();
  322.     }
  323.  
  324.     void reverse() {
  325.         // copy elements from Vector to a Stack
  326.         // then rebuild Vector by popping the elements back off the Stack
  327.         // Hey-presto! You've reversed the Vector!
  328.         Stack stk = new Stack();
  329.            for (Enumeration e = this.elements(); e.hasMoreElements(); )
  330.             stk.push(e.nextElement());
  331.         this.removeAllElements();
  332.            while (!stk.empty())
  333.                   this.addElement( stk.pop()) ;
  334.        }
  335. }
  336.  
  337. // class MPVector
  338. class MPVector extends VectorPlus {
  339.     MPVector() {
  340.         super();
  341.     }
  342.  
  343.     VectorPlus findAll(String s) {
  344.         // locate all occurences of s in MP Vector
  345.         MP anMP;
  346.         VectorPlus v = new VectorPlus();
  347.  
  348.         for (Enumeration e = this.elements(); e.hasMoreElements(); ) {
  349.              anMP = (MP)e.nextElement();
  350.              if (anMP.position.equalsIgnoreCase(s))
  351.                  v.addElement(anMP);
  352.         }
  353.         return v;
  354.     }
  355. }
  356.  
  357.  
  358.