home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / GraphicsTest.java < prev    next >
Text File  |  1997-07-30  |  12KB  |  488 lines

  1. // $Header: z:/admin/metro_examples/java/demo/GraphicsTest/rcs/GraphicsTest.java 1.1 1997/02/06 00:30:01 IPGIntel-2 Exp $ 
  2. /*
  3.  * @(#)GraphicsTest.java    1.4 96/12/06
  4.  *
  5.  * Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights Reserved.
  6.  *
  7.  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
  8.  * modify and redistribute this software in source and binary code form,
  9.  * provided that i) this copyright notice and license appear on all copies of
  10.  * the software; and ii) Licensee does not utilize the software in a manner
  11.  * which is disparaging to Sun.
  12.  *
  13.  * This software is provided "AS IS," without a warranty of any kind. ALL
  14.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  15.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  16.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  17.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  18.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  19.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  20.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  21.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  22.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  23.  * POSSIBILITY OF SUCH DAMAGES.
  24.  *
  25.  * This software is not designed or intended for use in on-line control of
  26.  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
  27.  * the design, construction, operation or maintenance of any nuclear
  28.  * facility. Licensee represents and warrants that it will not use or
  29.  * redistribute the Software for such purposes.
  30.  */
  31.  
  32. import java.awt.*;
  33. import java.applet.Applet;
  34.  
  35. public class GraphicsTest extends Applet 
  36. {
  37.     // class Variables
  38.     GraphicsCards cards;
  39.  
  40.     public void init() 
  41.     {
  42.        setLayout(new BorderLayout());
  43.        add("Center", cards = new GraphicsCards());
  44.        Panel p = new Panel();
  45.        p.add(new Button("next"));
  46.        p.add(new Button("previous"));
  47.        p.add(new Label("go to:", Label.RIGHT));
  48.  
  49.        Choice c;
  50.  
  51.        p.add(c = new Choice());
  52.        c.addItem("Arc");
  53.        c.addItem("Oval");
  54.        c.addItem("Polygon");
  55.        c.addItem("Rect");
  56.        c.addItem("RoundRect");
  57.        add("North", p);
  58.  
  59.        resize(400, 400);
  60.     }  // end init()
  61.  
  62.     public boolean action(Event evt, Object arg) 
  63.     {
  64.        if (evt.target instanceof Choice) 
  65.        {
  66.           ( (CardLayout) cards.getLayout() ).show(cards,(String) arg );
  67.        }
  68.        else 
  69.        {
  70.           if ("next".equals(arg)) 
  71.           {
  72.              ( (CardLayout) cards.getLayout() ).next(cards);
  73.           } 
  74.           else if ("previous".equals(arg)) 
  75.           {
  76.              ( (CardLayout) cards.getLayout() ).previous(cards);
  77.           }
  78.        }
  79.  
  80.        return true;
  81.     }  // end action()
  82.  
  83.     public static void main(String args[]) 
  84.     {
  85.        AppletFrame.startApplet("GraphicsTest", "Graphics Test", args);
  86.     }
  87.  
  88. }   // end class GraphicsTest
  89.  
  90.     
  91. class GraphicsCards extends Panel 
  92. {
  93.     public GraphicsCards() 
  94.     {
  95.        setLayout(new CardLayout());
  96.        add("Arc", new ArcCard());
  97.        add("Oval", new ShapeTest( new OvalShape() ) );
  98.        add("Polygon", new ShapeTest( new PolygonShape() ) );
  99.        add("Rect", new ShapeTest( new RectShape() ) );
  100.        add("RoundRect", new ShapeTest( new RoundRectShape() ) );
  101.     }
  102. }   // end class GraphicsCards
  103.  
  104.  
  105. class ArcCard extends Panel 
  106. {
  107.     public ArcCard() 
  108.     {
  109.        setLayout(new GridLayout(0, 2));
  110.        add(new ArcPanel(true));
  111.        add(new ArcPanel(false));
  112.        add(new ArcDegreePanel(true));
  113.        add(new ArcDegreePanel(false));
  114.     }
  115. }   // end class ArcCard
  116.  
  117.  
  118. class ArcDegreePanel extends Panel 
  119. {
  120.     // class variables
  121.     boolean filled;
  122.  
  123.     public ArcDegreePanel(boolean filled) 
  124.     {
  125.        this.filled = filled;
  126.     }
  127.  
  128.     void arcSteps(Graphics g, 
  129.                   int step, 
  130.                   int x, 
  131.                   int y, 
  132.                   int w, 
  133.                   int h, 
  134.                   Color c1,  
  135.                   Color c2) 
  136.     {
  137.        int a1 = 0;
  138.        int a2 = step;
  139.        int progress = 0;
  140.        g.setColor(c1);
  141.        for (; (a1+a2) <= 360; a1 = a1+a2, a2 += 1 ) 
  142.        {
  143.           if (g.getColor() == c1) 
  144.           {
  145.              g.setColor(c2);
  146.           } 
  147.           else 
  148.           {
  149.              g.setColor(c1);
  150.           }
  151.        
  152.           if (filled) 
  153.           {
  154.              g.fillArc(x, y, w, h, a1, a2);
  155.           } 
  156.           else 
  157.           {
  158.              g.drawArc(x, y, w, h, a1, a2);
  159.           }
  160.        
  161.           progress = a1+a2;
  162.        }  // end for
  163.  
  164.        if (progress != 360) 
  165.        {
  166.           if (filled) 
  167.           {
  168.              g.fillArc(x, y, w, h, a1, 360 - progress);
  169.           } 
  170.           else 
  171.           {
  172.              g.drawArc(x, y, w, h, a1, 360 - progress);
  173.           }
  174.        }  // end if
  175.     }  // end arcSteps()
  176.  
  177.     public void paint(Graphics g)
  178.     {
  179.        Rectangle r = bounds();
  180.  
  181.        arcSteps(g, 3, 0, 0, r.width, r.height, Color.orange, Color.blue);
  182.  
  183.        arcSteps(g, 
  184.                 2, 
  185.                 r.width / 4, 
  186.                 r.height / 4, 
  187.                 r.width / 2, 
  188.                 r.height / 2, 
  189.                 Color.yellow, 
  190.                 Color.green);
  191.  
  192.        arcSteps(g, 
  193.                 1, 
  194.                 (r.width  * 3) / 8, 
  195.                 (r.height * 3) / 8, 
  196.                 r.width / 4, 
  197.                 r.height / 4, 
  198.                 Color.magenta, 
  199.                 Color.white);
  200.  
  201.     }  // end paint()
  202. }   // end class ArcDegreePanel
  203.  
  204.  
  205. class ArcPanel extends Panel 
  206. {
  207.     // class variables
  208.     boolean filled;
  209.  
  210.     public ArcPanel(boolean filled) 
  211.     {
  212.        this.filled = filled;
  213.     }
  214.  
  215.     public void paint(Graphics g) 
  216.     {
  217.        Rectangle r = bounds();
  218.  
  219.        g.setColor(Color.yellow);
  220.        if (filled) 
  221.        {
  222.           g.fillArc(0, 0, r.width, r.height, 0, 45);
  223.        } 
  224.        else 
  225.        {
  226.           g.drawArc(0, 0, r.width, r.height, 0, 45);
  227.        }
  228.  
  229.        g.setColor(Color.green);
  230.        if (filled) 
  231.        {
  232.           g.fillArc(0, 0, r.width, r.height, 90, -45);
  233.        } 
  234.        else 
  235.        {
  236.           g.drawArc(0, 0, r.width, r.height, 90, -45);
  237.        }
  238.     
  239.        g.setColor(Color.orange);
  240.        if (filled) 
  241.        {
  242.           g.fillArc(0, 0, r.width, r.height, 135, -45);
  243.        } 
  244.        else 
  245.        {
  246.           g.drawArc(0, 0, r.width, r.height, 135, -45);
  247.        }
  248.  
  249.        g.setColor(Color.magenta);
  250.  
  251.        if (filled) 
  252.        {
  253.           g.fillArc(0, 0, r.width, r.height, -225, 45);
  254.        } 
  255.        else 
  256.        {
  257.           g.drawArc(0, 0, r.width, r.height, -225, 45);
  258.        }
  259.  
  260.        g.setColor(Color.yellow);
  261.        if (filled) 
  262.        {
  263.           g.fillArc(0, 0, r.width, r.height, 225, -45);
  264.        } 
  265.        else  
  266.        {
  267.           g.drawArc(0, 0, r.width, r.height, 225, -45);
  268.        }
  269.  
  270.        g.setColor(Color.green);
  271.        if (filled) 
  272.        {
  273.           g.fillArc(0, 0, r.width, r.height, -135, 45);
  274.        } 
  275.        else 
  276.        {
  277.           g.drawArc(0, 0, r.width, r.height, -135, 45);
  278.        }
  279.  
  280.        g.setColor(Color.orange);
  281.        if (filled) 
  282.        {
  283.           g.fillArc(0, 0, r.width, r.height, -45, -45);
  284.        } 
  285.        else 
  286.        {
  287.           g.drawArc(0, 0, r.width, r.height, -45, -45);
  288.        }
  289.  
  290.        g.setColor(Color.magenta);
  291.        if (filled) 
  292.        {
  293.           g.fillArc(0, 0, r.width, r.height, 315, 45);
  294.        } 
  295.        else 
  296.        {
  297.           g.drawArc(0, 0, r.width, r.height, 315, 45);
  298.        }
  299.  
  300.     }  // end paint()
  301.  
  302. }   // end class ArcPanel
  303.  
  304.  
  305. abstract class Shape 
  306. {
  307.     abstract void draw(Graphics g, int x, int y, int w, int h);
  308.     abstract void fill(Graphics g, int x, int y, int w, int h);
  309. }
  310.  
  311.  
  312. class RectShape extends Shape 
  313. {
  314.     void draw(Graphics g, int x, int y, int w, int h) 
  315.     {
  316.        g.drawRect(x, y, w, h);
  317.     }
  318.     
  319.     void fill(Graphics g, int x, int y, int w, int h) 
  320.     {
  321.        g.fillRect(x, y, w, h);
  322.     }
  323. }
  324.  
  325.  
  326. class OvalShape extends Shape 
  327. {
  328.     void draw(Graphics g, int x, int y, int w, int h) 
  329.     {
  330.        g.drawOval(x, y, w, h);
  331.     }
  332.     
  333.     void fill(Graphics g, int x, int y, int w, int h) 
  334.     {
  335.        g.fillOval(x, y, w, h);
  336.     }
  337. }
  338.  
  339.  
  340. class RoundRectShape extends Shape 
  341. {
  342.     void draw(Graphics g, int x, int y, int w, int h) 
  343.     {
  344.        g.drawRoundRect(x, y, w, h, 10, 10);
  345.     }
  346.  
  347.     void fill(Graphics g, int x, int y, int w, int h) 
  348.     {
  349.        g.fillRoundRect(x, y, w, h, 10, 10);
  350.     }
  351. }
  352.  
  353. class PolygonShape extends Shape 
  354. {
  355.     // class variables
  356.     Polygon p;
  357.     Polygon pBase;
  358.  
  359.     public PolygonShape() 
  360.     {
  361.        pBase = new Polygon();
  362.        pBase.addPoint(0, 0);
  363.        pBase.addPoint(10, 0);
  364.        pBase.addPoint(5, 15);
  365.        pBase.addPoint(10, 20);
  366.        pBase.addPoint(5, 20);
  367.        pBase.addPoint(0, 10);
  368.        pBase.addPoint(0, 0);
  369.     }
  370.  
  371.     void scalePolygon(float w, float h)
  372.     {
  373.        p = new Polygon();
  374.        for (int i = 0; i < pBase.npoints; ++i)
  375.        {
  376.           p.addPoint( (int) (pBase.xpoints[i] * w), 
  377.                       (int) (pBase.ypoints[i] * h) );
  378.        }
  379.  
  380.     }
  381.  
  382.     void draw(Graphics g, int x, int y, int w, int h) 
  383.     {
  384.        Graphics ng = g.create();
  385.        ng.translate(x, y);
  386.        scalePolygon( (float) ( (float) w / (float) 10 ), 
  387.                      (float) ( (float) h / (float) 20 ) );
  388.        ng.drawPolygon(p);
  389.     }
  390.  
  391.     void fill(Graphics g, int x, int y, int w, int h) 
  392.     {
  393.        Graphics ng = g.create();
  394.        ng.translate(x, y);
  395.        scalePolygon( (float) ( (float) w / (float) 10 ), 
  396.                      (float) ( (float) h / (float) 20 ) );
  397.        ng.fillPolygon(p);
  398.     }
  399. }
  400.  
  401.  
  402. class ShapeTest extends Panel 
  403. {
  404.     Shape   shape;
  405.     int     step;
  406.  
  407.     public ShapeTest(Shape shape, int step) 
  408.     {
  409.        this.shape = shape;
  410.        this.step = step;
  411.     }
  412.  
  413.     public ShapeTest(Shape shape) 
  414.     {
  415.        this(shape, 10);
  416.     }
  417.  
  418.     public void paint(Graphics g) 
  419.     {
  420.        Rectangle bounds = bounds();
  421.  
  422.        int cx, cy, cw, ch;
  423.  
  424.        Color color;
  425.    
  426.        for (color=Color.red, 
  427.             cx=bounds.x, 
  428.             cy=bounds.y, 
  429.             cw=bounds.width / 2, 
  430.             ch=bounds.height ; 
  431.  
  432.             cw > 0 && ch > 0 ;
  433.  
  434.             cx+=step, 
  435.             cy += step, 
  436.             cw -= (step * 2), 
  437.             ch -= (step * 2),
  438.             color=ColorUtils.darker(color, 0.9) ) 
  439.        {
  440.           g.setColor(color);
  441.           shape.draw(g, cx, cy, cw, ch);
  442.        }
  443.  
  444.        for ( cx=bounds.x + bounds.width / 2, 
  445.              cy=bounds.y,
  446.              cw=bounds.width / 2, ch=bounds.height ; 
  447.  
  448.              cw > 0 && ch > 0;
  449.           
  450.              cx+=step, 
  451.              cy += step, 
  452.              cw -= (step * 2),
  453.              ch -= (step * 2) ) 
  454.        {
  455.           if (g.getColor() == Color.red) 
  456.           {
  457.              g.setColor(Color.blue);
  458.           } 
  459.           else 
  460.           {
  461.              g.setColor(Color.red);
  462.           }
  463.  
  464.           shape.fill(g, cx, cy, cw, ch);
  465.        }  // end for
  466.  
  467.     }  // end paint()
  468.  
  469. }   // end class ShapeTest
  470.  
  471.  
  472. class ColorUtils 
  473. {
  474.     static Color brighter(Color c, double factor) 
  475.     {
  476.        return new Color( Math.min((int)(c.getRed()  *(1/factor)), 255), 
  477.                          Math.min((int)(c.getGreen()*(1/factor)), 255),
  478.                          Math.min((int)(c.getBlue() *(1/factor)), 255) );
  479.     }
  480.  
  481.     static Color darker(Color c, double factor) 
  482.     {
  483.        return new Color( Math.max((int)(c.getRed()  *factor), 0), 
  484.                          Math.max((int)(c.getGreen()*factor), 0),
  485.                          Math.max((int)(c.getBlue() *factor), 0) );
  486.     }
  487. }
  488.