home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / DrawTest.java < prev    next >
Text File  |  1998-05-08  |  6KB  |  236 lines

  1. /*
  2.  * @(#)DrawTest.java    1.3 96/12/06
  3.  *
  4.  * Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
  7.  * modify and redistribute this software in source and binary code form,
  8.  * provided that i) this copyright notice and license appear on all copies of
  9.  * the software; and ii) Licensee does not utilize the software in a manner
  10.  * which is disparaging to Sun.
  11.  *
  12.  * This software is provided "AS IS," without a warranty of any kind. ALL
  13.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  14.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  15.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  16.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  17.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  18.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  19.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  20.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  21.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  22.  * POSSIBILITY OF SUCH DAMAGES.
  23.  *
  24.  * This software is not designed or intended for use in on-line control of
  25.  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
  26.  * the design, construction, operation or maintenance of any nuclear
  27.  * facility. Licensee represents and warrants that it will not use or
  28.  * redistribute the Software for such purposes.
  29.  */
  30.  
  31. import java.awt.*;
  32. import java.applet.*;
  33.  
  34. import java.util.Vector;
  35.  
  36. public class DrawTest extends Applet {
  37.     public void init() {
  38.     setLayout(new BorderLayout());
  39.     DrawPanel dp = new DrawPanel();
  40.     add("Center", dp);
  41.     add("South",new DrawControls(dp));
  42.     }
  43.  
  44.     public boolean handleEvent(Event e) {
  45.     switch (e.id) {
  46.       case Event.WINDOW_DESTROY:
  47.         System.exit(0);
  48.         return true;
  49.       default:
  50.         return false;
  51.     }
  52.     }
  53.  
  54.     public static void main(String args[]) {
  55.     Frame f = new Frame("DrawTest");
  56.     DrawTest drawTest = new DrawTest();
  57.     drawTest.init();
  58.     drawTest.start();
  59.  
  60.     f.add("Center", drawTest);
  61.     f.resize(300, 300);
  62.     f.show();
  63.     }
  64. }
  65.  
  66. class DrawPanel extends Panel {
  67.     public static final int LINES = 0;
  68.     public static final int POINTS = 1;
  69.     int       mode = LINES;
  70.     Vector lines = new Vector();
  71.     Vector colors = new Vector();
  72.     int x1,y1;
  73.     int x2,y2;
  74.     int xl, yl;
  75.  
  76.     public DrawPanel() {
  77.     setBackground(Color.white);
  78.     }
  79.  
  80.     public void setDrawMode(int mode) {
  81.     switch (mode) {
  82.       case LINES:
  83.       case POINTS:
  84.         this.mode = mode;
  85.         break;
  86.       default:
  87.         throw new IllegalArgumentException();
  88.     }
  89.     }
  90.  
  91.     public boolean handleEvent(Event e) {
  92.     switch (e.id) {
  93.       case Event.MOUSE_DOWN:
  94.         switch (mode) {
  95.           case LINES:
  96.         x1 = e.x;
  97.         y1 = e.y;
  98.         x2 = -1;
  99.         break;
  100.           case POINTS:
  101.           default:
  102.         colors.addElement(getForeground());
  103.         lines.addElement(new Rectangle(e.x, e.y, -1, -1));
  104.         x1 = e.x;
  105.         y1 = e.y;
  106.         repaint();
  107.         break;
  108.         }
  109.         return true;
  110.       case Event.MOUSE_UP:
  111.         switch (mode) {
  112.           case LINES:
  113.         colors.addElement(getForeground());
  114.         lines.addElement(new Rectangle(x1, y1, e.x, e.y));
  115.         x2 = xl = -1;
  116.         break;
  117.           case POINTS:
  118.           default:
  119.         break;
  120.         }
  121.         repaint();
  122.         return true;
  123.       case Event.MOUSE_DRAG:
  124.         switch (mode) {
  125.           case LINES:
  126.         xl = x2;
  127.         yl = y2;
  128.         x2 = e.x;
  129.         y2 = e.y;
  130.         break;
  131.           case POINTS:
  132.           default:
  133.         colors.addElement(getForeground());
  134.         lines.addElement(new Rectangle(x1, y1, e.x, e.y));
  135.         x1 = e.x;
  136.         y1 = e.y;
  137.         break;
  138.         }
  139.         repaint();
  140.         return true;
  141.       case Event.WINDOW_DESTROY:
  142.         System.exit(0);
  143.         return true;
  144.       default:
  145.         return false;
  146.     }
  147.     }
  148.  
  149.     public void paint(Graphics g) {
  150.     int np = lines.size();
  151.  
  152.     /* draw the current lines */
  153.     g.setColor(getForeground());
  154.     g.setPaintMode();
  155.     for (int i=0; i < np; i++) {
  156.         Rectangle p = (Rectangle)lines.elementAt(i);
  157.         g.setColor((Color)colors.elementAt(i));
  158.         if (p.width != -1) {
  159.         g.drawLine(p.x, p.y, p.width, p.height);
  160.         } else {
  161.         g.drawLine(p.x, p.y, p.x, p.y);
  162.         }
  163.     }
  164.     if (mode == LINES) {
  165.         g.setXORMode(getBackground());
  166.         if (xl != -1) {
  167.         /* erase the last line. */
  168.         g.drawLine(x1, y1, xl, yl);
  169.         }
  170.         g.setColor(getForeground());
  171.         g.setPaintMode();
  172.         if (x2 != -1) {
  173.         g.drawLine(x1, y1, x2, y2);
  174.         }
  175.     }
  176.     }
  177. }
  178.  
  179.  
  180. class DrawControls extends Panel {
  181.     DrawPanel target;
  182.  
  183.     public DrawControls(DrawPanel target) {
  184.     this.target = target;
  185.     setLayout(new FlowLayout());
  186.     setBackground(Color.lightGray);
  187.     target.setForeground(Color.red);
  188.     CheckboxGroup group = new CheckboxGroup();
  189.     Checkbox b;
  190.     add(b = new Checkbox(null, group, false));
  191.     b.setBackground(Color.red);
  192.     add(b = new Checkbox(null, group, false));
  193.     b.setBackground(Color.green);
  194.     add(b = new Checkbox(null, group, false));
  195.     b.setBackground(Color.blue);
  196.     add(b = new Checkbox(null, group, false));
  197.     b.setBackground(Color.pink);
  198.     add(b = new Checkbox(null, group, false));
  199.     b.setBackground(Color.orange);
  200.     add(b = new Checkbox(null, group, true));
  201.     b.setBackground(Color.black);
  202.     target.setForeground(b.getForeground());
  203.     Choice shapes = new Choice();
  204.     shapes.addItem("Lines");
  205.     shapes.addItem("Points");
  206.     shapes.setBackground(Color.lightGray);
  207.     add(shapes);
  208.     }
  209.  
  210.     public void paint(Graphics g) {
  211.     Rectangle r = bounds();
  212.  
  213.     g.setColor(Color.lightGray);
  214.     g.draw3DRect(0, 0, r.width, r.height, false);
  215.     }
  216.  
  217.     public boolean action(Event e, Object arg) {
  218.     if (e.target instanceof Checkbox) {
  219.         target.setForeground(((Component)e.target).getBackground());
  220.     } else if (e.target instanceof Choice) {
  221.         String choice = (String)arg;
  222.  
  223.         if (choice.equals("Lines")) {
  224.         target.setDrawMode(DrawPanel.LINES);
  225.         } else if (choice.equals("Points")) {
  226.         target.setDrawMode(DrawPanel.POINTS);
  227.         }
  228.     }
  229.     return true;
  230.     }
  231. }
  232.     
  233.  
  234.  
  235.     
  236.