1  import java.awt.*;
  2  import java.awt.event.*;
  3  import javax.swing.*;
  4  import javax.swing.event.*;
  5  
  6  public class ColorDialog extends JDialog {
  7    // Declare color component values and selected color
  8    private int redValue, greenValue, blueValue;
  9    private Color color = null;
 10  
 11    // Create sliders
 12    private JSlider jslRed = new JSlider(0, 128);
 13    private JSlider jslGreen = new JSlider(0, 128);
 14    private JSlider jslBlue = new JSlider(0, 128);
 15  
 16    // Create two buttons
 17    private JButton jbtOK = new JButton("OK");
 18    private JButton jbtCancel = new JButton("Cancel");
 19  
 20    // Create a panel to display the selected color
 21    private JPanel jpSelectedColor = new JPanel();
 22  
 23    public ColorDialog() {
 24      this(null, true);
 25    }
 26  
 27    public ColorDialog(java.awt.Frame parent, boolean modal) {
 28      super(parent, modal);
 29      setTitle("Choose Color");
 30  
 31      // Group two buttons OK and Cancel
 32      JPanel jpButtons = new JPanel();
 33      jpButtons.add(jbtOK);
 34      jpButtons.add(jbtCancel);
 35  
 36      // Group labels
 37      JPanel jpLabels = new JPanel();
 38      jpLabels.setLayout(new GridLayout(3, 0));
 39      jpLabels.add(new JLabel("Red"));
 40      jpLabels.add(new JLabel("Green"));
 41      jpLabels.add(new JLabel("Blue"));
 42  
 43      // Group sliders for selecting red, green, and blue colors
 44      JPanel jpSliders = new JPanel();
 45      jpSliders.setLayout(new GridLayout(3, 0));
 46      jpSliders.add(jslRed);
 47      jpSliders.add(jslGreen);
 48      jpSliders.add(jslBlue);
 49  
 50      // Group jpLabels and jpSliders
 51      JPanel jpSelectColor = new JPanel();
 52      jpSelectColor.setLayout(new BorderLayout());
 53      jpSelectColor.setBorder(
 54        BorderFactory.createTitledBorder("Select Color"));
 55      jpSelectColor.add(jpLabels, BorderLayout.WEST);
 56      jpSelectColor.add(jpSliders, BorderLayout.CENTER);
 57  
 58      // Group jpSelectColor and jpSelectedColor
 59      JPanel jpColor = new JPanel();
 60      jpColor.setLayout(new BorderLayout());
 61      jpColor.add(jpSelectColor, BorderLayout.SOUTH);
 62      jpColor.add(jpSelectedColor, BorderLayout.CENTER);
 63  
 64      // Place jpButtons and jpColor into the dialog box
 65      add(jpButtons, BorderLayout.SOUTH);
 66      add(jpColor, BorderLayout.CENTER);
 67      pack();
 68  
 69      jbtOK.addActionListener(new ActionListener() {
 70        @Override
 71        public void actionPerformed(ActionEvent e) {
 72          setVisible(false);
 73        }
 74      });
 75  
 76      jbtCancel.addActionListener(new ActionListener() {
 77        @Override
 78        public void actionPerformed(ActionEvent e) {
 79          color = null;
 80          setVisible(false);
 81        }
 82      });
 83  
 84      jslRed.addChangeListener(new ChangeListener() {
 85        @Override
 86        public void stateChanged(ChangeEvent e) {
 87          redValue = jslRed.getValue();
 88          color = new Color(redValue, greenValue, blueValue);
 89          jpSelectedColor.setBackground(color);
 90        }
 91      });
 92  
 93      jslGreen.addChangeListener(new ChangeListener() {
 94        @Override
 95        public void stateChanged(ChangeEvent e) {
 96          greenValue = jslGreen.getValue();
 97          color = new Color(redValue, greenValue, blueValue);
 98          jpSelectedColor.setBackground(color);
 99        }
100      });
101  
102      jslBlue.addChangeListener(new ChangeListener() {
103        @Override
104        public void stateChanged(ChangeEvent e) {
105          blueValue = jslBlue.getValue();
106          color = new Color(redValue, greenValue, blueValue);
107          jpSelectedColor.setBackground(color);
108        }
109      });
110    }
111  
112    @Override
113    public Dimension getPreferredSize() {
114      return new java.awt.Dimension(200, 200);
115    }
116  
117    /** Return color */
118    public Color getColor() {
119      return color;
120    }
121  }