1 /*
   2  *
   3  * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  *
   9  *   - Redistributions of source code must retain the above copyright
  10  *     notice, this list of conditions and the following disclaimer.
  11  *
  12  *   - Redistributions in binary form must reproduce the above copyright
  13  *     notice, this list of conditions and the following disclaimer in the
  14  *     documentation and/or other materials provided with the distribution.
  15  *
  16  *   - Neither the name of Oracle nor the names of its
  17  *     contributors may be used to endorse or promote products derived
  18  *     from this software without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31  */
  32 
  33 
  34 import javax.swing.*;
  35 import javax.swing.event.*;
  36 import javax.swing.text.*;
  37 import javax.swing.border.*;
  38 import javax.swing.colorchooser.*;
  39 import javax.swing.filechooser.*;
  40 import javax.accessibility.*;
  41 
  42 import java.awt.*;
  43 import java.awt.event.*;
  44 import java.beans.*;
  45 import java.util.*;
  46 import java.io.*;
  47 import java.applet.*;
  48 import java.net.*;
  49 
  50 /**
  51  * JColorChooserDemo
  52  *
  53  * @author Jeff Dinkins
  54  */
  55 public class ColorChooserDemo extends DemoModule {
  56 
  57     BezierAnimationPanel bezAnim;
  58     JButton outerColorButton = null;
  59     JButton backgroundColorButton = null;
  60     JButton gradientAButton = null;
  61     JButton gradientBButton = null;
  62 
  63     // to store the color chosen from the JColorChooser
  64     private Color chosen;
  65 
  66     /**
  67      * main method allows us to run as a standalone demo.
  68      */
  69     public static void main(String[] args) {
  70         ColorChooserDemo demo = new ColorChooserDemo(null);
  71         demo.mainImpl();
  72     }
  73 
  74 
  75     /**
  76      * ColorChooserDemo Constructor
  77      */
  78     public ColorChooserDemo(SwingSet2 swingset) {
  79         // Set the title for this demo, and an icon used to represent this
  80         // demo inside the SwingSet2 app.
  81         super(swingset, "ColorChooserDemo", "toolbar/JColorChooser.gif");
  82 
  83         // Create the bezier animation panel to put in the center of the panel.
  84         bezAnim = new BezierAnimationPanel();
  85 
  86         outerColorButton = new JButton(getString("ColorChooserDemo.outer_line"));
  87         outerColorButton.setIcon(new ColorSwatch("OuterLine", bezAnim));
  88 
  89         backgroundColorButton = new JButton(getString("ColorChooserDemo.background"));
  90         backgroundColorButton.setIcon(new ColorSwatch("Background", bezAnim));
  91 
  92         gradientAButton = new JButton(getString("ColorChooserDemo.grad_a"));
  93         gradientAButton.setIcon(new ColorSwatch("GradientA", bezAnim));
  94 
  95         gradientBButton = new JButton(getString("ColorChooserDemo.grad_b"));
  96         gradientBButton.setIcon(new ColorSwatch("GradientB", bezAnim));
  97 
  98         ActionListener l = new ActionListener() {
  99             public void actionPerformed(ActionEvent e) {
 100                 Color current = bezAnim.getOuterColor();
 101 
 102                 if(e.getSource() == backgroundColorButton) {
 103                     current = bezAnim.getBackgroundColor();
 104                 } else if(e.getSource() == gradientAButton) {
 105                     current = bezAnim.getGradientColorA();
 106                 } else if(e.getSource() == gradientBButton) {
 107                     current = bezAnim.getGradientColorB();
 108                 }
 109 
 110                 final JColorChooser chooser = new JColorChooser(current != null ?
 111                                                                 current :
 112                                                                 Color.WHITE);
 113                 if (getSwingSet2() != null && getSwingSet2().isDragEnabled()) {
 114                     chooser.setDragEnabled(true);
 115                 }
 116 
 117                 chosen = null;
 118                 ActionListener okListener = new ActionListener() {
 119                     public void actionPerformed(ActionEvent ae) {
 120                         chosen = chooser.getColor();
 121                     }
 122                 };
 123 
 124                 JDialog dialog = JColorChooser.createDialog(getDemoPanel(),
 125                                                             getString("ColorChooserDemo.chooser_title"),
 126                                                             true,
 127                                                             chooser,
 128                                                             okListener,
 129                                                             null);
 130 
 131                 dialog.show();
 132 
 133                 if(e.getSource() == outerColorButton) {
 134                     bezAnim.setOuterColor(chosen);
 135                 } else if(e.getSource() == backgroundColorButton) {
 136                     bezAnim.setBackgroundColor(chosen);
 137                 } else if(e.getSource() == gradientAButton) {
 138                     bezAnim.setGradientColorA(chosen);
 139                 } else {
 140                     bezAnim.setGradientColorB(chosen);
 141                 }
 142             }
 143         };
 144 
 145         outerColorButton.addActionListener(l);
 146         backgroundColorButton.addActionListener(l);
 147         gradientAButton.addActionListener(l);
 148         gradientBButton.addActionListener(l);
 149 
 150         // Add everything to the panel
 151         JPanel p = getDemoPanel();
 152         p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
 153 
 154         // Add control buttons
 155         JPanel buttonPanel = new JPanel();
 156         buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
 157 
 158         buttonPanel.add(backgroundColorButton);
 159         buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
 160 
 161         buttonPanel.add(gradientAButton);
 162         buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
 163 
 164         buttonPanel.add(gradientBButton);
 165         buttonPanel.add(Box.createRigidArea(new Dimension(15, 1)));
 166 
 167         buttonPanel.add(outerColorButton);
 168 
 169         // Add the panel midway down the panel
 170         p.add(Box.createRigidArea(new Dimension(1, 10)));
 171         p.add(buttonPanel);
 172         p.add(Box.createRigidArea(new Dimension(1, 5)));
 173         p.add(bezAnim);
 174     }
 175 
 176     class ColorSwatch implements Icon {
 177         String gradient;
 178         BezierAnimationPanel bez;
 179 
 180         public ColorSwatch(String g, BezierAnimationPanel b) {
 181             bez = b;
 182             gradient = g;
 183         }
 184 
 185         public int getIconWidth() {
 186             return 11;
 187         }
 188 
 189         public int getIconHeight() {
 190             return 11;
 191         }
 192 
 193         public void paintIcon(Component c, Graphics g, int x, int y) {
 194             g.setColor(Color.black);
 195             g.fillRect(x, y, getIconWidth(), getIconHeight());
 196             if(gradient.equals("GradientA")) {
 197                 g.setColor(bez.getGradientColorA());
 198             } else if(gradient.equals("GradientB")) {
 199                 g.setColor(bez.getGradientColorB());
 200             } else if(gradient.equals("Background")) {
 201                 g.setColor(bez.getBackgroundColor());
 202             } else if(gradient.equals("OuterLine")) {
 203                 g.setColor(bez.getOuterColor());
 204             }
 205             g.fillRect(x+2, y+2, getIconWidth()-4, getIconHeight()-4);
 206         }
 207     }
 208 
 209 }