home *** CD-ROM | disk | FTP | other *** search
/ Web Programming with Visual J++ / Web_Programming_with_Visual_J_SAMS.NET_Version_1.0_1997.iso / source / chap16 / ex16b.java < prev    next >
Text File  |  1996-09-16  |  8KB  |  279 lines

  1. import java.applet.*;
  2. import java.awt.*;
  3. import java.util.*;
  4. import SetColorControls;
  5.  
  6. public class EX16B extends Applet implements Observer
  7. {
  8.     protected Button SetColorButton = new Button("Set Color");
  9.     protected Button SetFontButton = new Button("Set Font");
  10.     protected String MyText = new String("This is the text being modified.");
  11.     protected Frame frame;
  12.     protected ColorData cData = new ColorData();
  13.     protected SetColorDialog SetColorDlg;
  14.  
  15.     public void init()
  16.     {
  17.          // set up the set color dialog frame
  18.         frame = new Frame();
  19.         frame.resize(1, 1);
  20.  
  21.         // let the applet observe the color
  22.         cData.addObserver(this);
  23.  
  24.         // add the controls to the applet
  25.         add(SetColorButton);
  26.         add(SetFontButton);
  27.     }
  28.  
  29.     public void paint(Graphics g)
  30.     {
  31.         // use the color data to set the text color
  32.         g.setColor(cData.GetColor());
  33.  
  34.         g.drawString(MyText, 20, 100);
  35.     }
  36.  
  37.     public boolean action(Event evt, Object obj) 
  38.     {
  39.         boolean result = false;            // asume no action
  40.  
  41.         if ("Set Color".equals(obj)) {
  42.             SetColorDlg = new SetColorDialog(frame, cData);
  43.             SetColorDlg.show();
  44.  
  45.             result = true;
  46.         }
  47.  
  48.         return result;
  49.     }
  50.  
  51.     public void update(Observable o, Object arg)
  52.     {
  53.         // since the paint method all ready looks at cData, simply 
  54.         //   force a repaint of the dialog to pic up the new color
  55.         repaint();
  56.     }
  57. }
  58.  
  59. class ColorData extends Observable
  60. {
  61.     protected Color clr = new Color(Color.black.getRGB());
  62.  
  63.     public Color GetColor()
  64.     {
  65.         return clr;
  66.     }
  67.  
  68.     public void SetColor(Color clr)
  69.     {
  70.         this.clr = clr;                    // save the color
  71.  
  72.         // flag the change an notify the on-lookers
  73.         setChanged();
  74.         notifyObservers();
  75.     }
  76. }
  77.  
  78. class SetColorDialog extends Dialog
  79. {
  80.     protected Color selectedColor;
  81.     protected ColorData cData;
  82.     protected SetColorControls ctrls;
  83.     protected Rectangle sampleRect;
  84.  
  85.     public SetColorDialog(Frame parent, ColorData cData)
  86.     {
  87.         super(parent, "Set Color", true);
  88.  
  89.         setFont(new Font("Dialog", Font.PLAIN, 16));
  90.  
  91.         // don't let the user change the size
  92.         setResizable(false);
  93.  
  94.         resize(220, 116);
  95.  
  96.         // create the controls for the dialog
  97.         ctrls = new SetColorControls(this);
  98.         ctrls.CreateControls();
  99.  
  100.         FillSetColorTo();
  101.         SetupScrollbars();
  102.  
  103.         // save the data and start off with the current color
  104.         this.cData = cData;
  105.         selectedColor = new Color(cData.GetColor().getRGB());
  106.     }
  107.  
  108.     public boolean action(Event evt, Object arg) 
  109.     {
  110.         boolean result = false;            // asume no action
  111.  
  112.         if ("OK".equals(evt.arg)) {
  113.             cData.SetColor(selectedColor);
  114.             dispose();                    // close the dialog
  115.         }
  116.         if ("Cancel".equals(evt.arg))
  117.             dispose();                    // close the dialog
  118.  
  119.         return result;
  120.     }
  121.  
  122.     public boolean handleEvent(Event evt)
  123.     {
  124.         boolean result = false;            // assume no action
  125.  
  126.         // call the superclass for normal processing
  127.         result = super.handleEvent(evt);
  128.  
  129.         // process the event here if not handled yet
  130.         if (!result) {
  131.             if (evt.target == ctrls.RedScrollbar) {
  132.                 handleScrollbarEvent(ctrls.RedScrollbar, ctrls.RedValue);
  133.                 result = true;
  134.             }
  135.             else if (evt.target == ctrls.GreenScrollbar) {
  136.                 handleScrollbarEvent(ctrls.GreenScrollbar, ctrls.GreenValue);
  137.                 result = true;
  138.             }
  139.             else if (evt.target == ctrls.BlueScrollbar) {
  140.                 handleScrollbarEvent(ctrls.BlueScrollbar, ctrls.BlueValue);
  141.                 result = true;
  142.             }
  143.             else if (evt.target == ctrls.StandardColorChoice) {
  144.                 handleChoiceEvent();
  145.                 result = true;
  146.             }
  147.         }
  148.  
  149.         return result;
  150.     }
  151.  
  152.     public void paint(Graphics g)
  153.     {
  154.         super.paint(g);                    // let normal processing happen
  155.  
  156.         if (selectedColor != null) {
  157.             if (sampleRect == null) {
  158.                 // determine where we can put the sample color
  159.                 sampleRect = ctrls.StandardColorChoice.bounds();
  160.                 sampleRect.x += sampleRect.width + 10;
  161.                 sampleRect.width = 20;
  162.                 sampleRect.height = 20;
  163.             }
  164.  
  165.             g.setColor(selectedColor);
  166.  
  167.             g.drawRect(sampleRect.x, sampleRect.y, 
  168.                         sampleRect.width, sampleRect.height);
  169.             g.fillRect(sampleRect.x, sampleRect.y, 
  170.                 sampleRect.width, sampleRect.height);
  171.         }
  172.     }
  173.  
  174.     protected void FillSetColorTo() 
  175.     {
  176.         ctrls.StandardColorChoice.addItem("black");
  177.         ctrls.StandardColorChoice.addItem("blue");
  178.         ctrls.StandardColorChoice.addItem("cyan");
  179.         ctrls.StandardColorChoice.addItem("darkGray");
  180.         ctrls.StandardColorChoice.addItem("gray");
  181.         ctrls.StandardColorChoice.addItem("green");
  182.         ctrls.StandardColorChoice.addItem("lightGray");
  183.         ctrls.StandardColorChoice.addItem("magenta");
  184.         ctrls.StandardColorChoice.addItem("orange");
  185.         ctrls.StandardColorChoice.addItem("pink");
  186.         ctrls.StandardColorChoice.addItem("red");
  187.         ctrls.StandardColorChoice.addItem("white");
  188.         ctrls.StandardColorChoice.addItem("yellow");
  189.         ctrls.StandardColorChoice.addItem("custom");
  190.     }
  191.  
  192.     protected void SetupScrollbars() 
  193.     {
  194.         ctrls.RedScrollbar.setValues(0, 10, 0, 255);
  195.         ctrls.GreenScrollbar.setValues(0, 10, 0, 255);
  196.         ctrls.BlueScrollbar.setValues(0, 10, 0, 255);
  197.     }
  198.  
  199.     protected void handleScrollbarEvent(Scrollbar sBar, Label sBarValue)
  200.     {
  201.         int value = sBar.getValue();
  202.  
  203.         // set the text value accroding to the scroll bar
  204.         sBarValue.setText(String.valueOf(value));
  205.  
  206.         // reset the actual sample
  207.         SetSampleColor();
  208.  
  209.         // changing of the scroll bar means it is custom
  210.         ctrls.StandardColorChoice.select("custom");
  211.     }
  212.  
  213.     protected void handleChoiceEvent()
  214.     {
  215.         Color standardColor = null;        // holds found color
  216.         String name = ctrls.StandardColorChoice.getSelectedItem();
  217.  
  218.         // check for each of the standard colors
  219.         if (name == "black")
  220.             standardColor = new Color(Color.black.getRGB());
  221.         else if (name == "blue")
  222.             standardColor = new Color(Color.blue.getRGB());
  223.         else if (name == "cyan")
  224.             standardColor = new Color(Color.cyan.getRGB());
  225.         else if (name == "darkGray")
  226.             standardColor = new Color(Color.darkGray.getRGB());
  227.         else if (name == "gray")
  228.             standardColor = new Color(Color.gray.getRGB());
  229.         else if (name == "green")
  230.             standardColor = new Color(Color.green.getRGB());
  231.         else if (name == "lightGray")
  232.             standardColor = new Color(Color.lightGray.getRGB());
  233.         else if (name == "magenta")
  234.             standardColor = new Color(Color.magenta.getRGB());
  235.         else if (name == "orange")
  236.             standardColor = new Color(Color.orange.getRGB());
  237.         else if (name == "pink")
  238.             standardColor = new Color(Color.pink.getRGB());
  239.         else if (name == "red")
  240.             standardColor = new Color(Color.red.getRGB());
  241.         else if (name == "white")
  242.             standardColor = new Color(Color.white.getRGB());
  243.         else if (name == "yellow")
  244.             standardColor = new Color(Color.yellow.getRGB());
  245.  
  246.         // set the scrollbar if the color is not custom
  247.         if (standardColor != null) {
  248.             SetScrollbarValue(ctrls.RedScrollbar, 
  249.                     ctrls.RedValue, standardColor.getRed());
  250.             SetScrollbarValue(ctrls.GreenScrollbar, 
  251.                     ctrls.GreenValue, standardColor.getGreen());
  252.             SetScrollbarValue(ctrls.BlueScrollbar, 
  253.                     ctrls.BlueValue, standardColor.getBlue());
  254.  
  255.             // reset the actual sample
  256.             SetSampleColor();
  257.         }
  258.     }
  259.  
  260.     protected void SetScrollbarValue(Scrollbar sBar, 
  261.             Label sBarValue, int value)
  262.     {
  263.         sBar.setValue(value);            // set the value
  264.  
  265.         // set the text value accroding to the new value
  266.         sBarValue.setText(String.valueOf(value));
  267.     }
  268.  
  269.  
  270.     protected void SetSampleColor()
  271.     {
  272.         int red = ctrls.RedScrollbar.getValue();
  273.         int green = ctrls.GreenScrollbar.getValue();
  274.         int blue = ctrls.BlueScrollbar.getValue();
  275.  
  276.         selectedColor = new Color(red, green, blue);
  277.         repaint();
  278.     }
  279. }