1. /*
  2. * @(#)DefaultRGBChooserPanel.java 1.22 01/11/29
  3. *
  4. * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing.colorchooser;
  8. import javax.swing.*;
  9. import javax.swing.border.*;
  10. import javax.swing.event.*;
  11. import javax.swing.text.*;
  12. import java.awt.*;
  13. import java.awt.image.*;
  14. import java.awt.event.*;
  15. import java.beans.PropertyChangeEvent;
  16. import java.beans.PropertyChangeListener;
  17. import java.io.Serializable;
  18. /**
  19. * The standard RGB chooser.
  20. * <p>
  21. * <strong>Warning:</strong>
  22. * Serialized objects of this class will not be compatible with
  23. * future Swing releases. The current serialization support is appropriate
  24. * for short term storage or RMI between applications running the same
  25. * version of Swing. A future release of Swing will provide support for
  26. * long term persistence.
  27. *
  28. * @version 1.22 11/29/01
  29. * @author Steve Wilson
  30. * @see JColorChooser
  31. * @see AbstractColorChooserPanel
  32. */
  33. class DefaultRGBChooserPanel extends AbstractColorChooserPanel implements ChangeListener {
  34. protected JSlider redSlider;
  35. protected JSlider greenSlider;
  36. protected JSlider blueSlider;
  37. protected JIntegerTextField redField;
  38. protected JIntegerTextField blueField;
  39. protected JIntegerTextField greenField;
  40. private final int minValue = 0;
  41. private final int maxValue = 255;
  42. boolean isAdjusting = false;
  43. public DefaultRGBChooserPanel() {
  44. super();
  45. }
  46. public void setColor( Color newColor ) {
  47. redSlider.setValue( newColor.getRed() );
  48. greenSlider.setValue( newColor.getGreen() );
  49. blueSlider.setValue( newColor.getBlue() );
  50. }
  51. public String getDisplayName() {
  52. return UIManager.getString("ColorChooser.rgbNameText");
  53. }
  54. public Icon getSmallDisplayIcon() {
  55. return null;
  56. }
  57. public Icon getLargeDisplayIcon() {
  58. return null;
  59. }
  60. /**
  61. * The background color, foreground color, and font are already set to the
  62. * defaults from the defaults table before this method is called.
  63. */
  64. public void installChooserPanel(JColorChooser enclosingChooser) {
  65. super.installChooserPanel(enclosingChooser);
  66. }
  67. protected void buildChooser() {
  68. String redString = UIManager.getString("ColorChooser.rgbRedText");
  69. String greenString = UIManager.getString("ColorChooser.rgbGreenText");
  70. String blueString = UIManager.getString("ColorChooser.rgbBlueText");
  71. setLayout( new BorderLayout() );
  72. Color color = getColorFromModel();
  73. JPanel enclosure = new JPanel();
  74. enclosure.setLayout( new SmartGridLayout( 3, 3 ) );
  75. // The panel that holds the sliders
  76. add( enclosure, BorderLayout.CENTER );
  77. // sliderPanel.setBorder(new LineBorder(Color.black));
  78. DocumentListener numberChange = new NumberListener();
  79. // The row for the red value
  80. JLabel l = new JLabel(redString);
  81. l.setDisplayedMnemonic(UIManager.getInt("ColorChooser.rgbRedMnemonic"));
  82. enclosure.add(l);
  83. redSlider = new JSlider( JSlider.HORIZONTAL, 0, 255, color.getRed() );
  84. redSlider.setMajorTickSpacing( 85 );
  85. redSlider.setMinorTickSpacing( 17 );
  86. redSlider.setPaintTicks( true );
  87. redSlider.setPaintLabels( true );
  88. enclosure.add( redSlider );
  89. redField = new JIntegerTextField(minValue, maxValue, color.getRed());
  90. l.setLabelFor(redSlider);
  91. JPanel redFieldHolder = new JPanel(new CenterLayout());
  92. redField.getDocument().addDocumentListener(numberChange);
  93. redFieldHolder.add(redField);
  94. enclosure.add(redFieldHolder);
  95. // The row for the green value
  96. l = new JLabel(greenString);
  97. l.setDisplayedMnemonic(UIManager.getInt("ColorChooser.rgbGreenMnemonic"));
  98. enclosure.add(l);
  99. greenSlider = new JSlider( JSlider.HORIZONTAL, 0, 255, color.getRed() );
  100. greenSlider.setMajorTickSpacing( 85 );
  101. greenSlider.setMinorTickSpacing( 17 );
  102. greenSlider.setPaintTicks( true );
  103. greenSlider.setPaintLabels( true );
  104. enclosure.add(greenSlider);
  105. greenField = new JIntegerTextField(minValue, maxValue, color.getGreen());
  106. l.setLabelFor(greenSlider);
  107. JPanel greenFieldHolder = new JPanel(new CenterLayout());
  108. greenFieldHolder.add(greenField);
  109. greenField.getDocument().addDocumentListener(numberChange);
  110. enclosure.add(greenFieldHolder);
  111. // The slider for the blue value
  112. l = new JLabel(blueString);
  113. l.setDisplayedMnemonic(UIManager.getInt("ColorChooser.rgbBlueMnemonic"));
  114. enclosure.add(l);
  115. blueSlider = new JSlider( JSlider.HORIZONTAL, 0, 255, color.getRed() );
  116. blueSlider.setMajorTickSpacing( 85 );
  117. blueSlider.setMinorTickSpacing( 17 );
  118. blueSlider.setPaintTicks( true );
  119. blueSlider.setPaintLabels( true );
  120. enclosure.add(blueSlider);
  121. blueField = new JIntegerTextField(minValue, maxValue, color.getBlue());
  122. l.setLabelFor(blueSlider);
  123. JPanel blueFieldHolder = new JPanel(new CenterLayout());
  124. blueFieldHolder.add(blueField);
  125. blueField.getDocument().addDocumentListener(numberChange);
  126. enclosure.add(blueFieldHolder);
  127. redSlider.addChangeListener( this );
  128. greenSlider.addChangeListener( this );
  129. blueSlider.addChangeListener( this );
  130. redSlider.putClientProperty("JSlider.isFilled", Boolean.TRUE);
  131. greenSlider.putClientProperty("JSlider.isFilled", Boolean.TRUE);
  132. blueSlider.putClientProperty("JSlider.isFilled", Boolean.TRUE);
  133. }
  134. public void uninstallChooserPanel(JColorChooser enclosingChooser) {
  135. super.uninstallChooserPanel(enclosingChooser);
  136. }
  137. public void updateChooser() {
  138. if (isAdjusting) {
  139. return;
  140. }
  141. // System.out.println("Adjusting");
  142. isAdjusting = true;
  143. Color color = getColorFromModel();
  144. int red = color.getRed();
  145. int blue = color.getBlue();
  146. int green = color.getGreen();
  147. redSlider.setValue(red);
  148. blueSlider.setValue(blue);
  149. greenSlider.setValue(green);
  150. if ( redField.getIntegerValue() != red )
  151. redField.setText(String.valueOf(color.getRed()));
  152. if ( greenField.getIntegerValue() != green )
  153. greenField.setText(String.valueOf(color.getGreen()));
  154. if ( blueField.getIntegerValue() != blue )
  155. blueField.setText(String.valueOf(color.getBlue()));
  156. isAdjusting = false;
  157. // System.out.println("Calling update");
  158. }
  159. public void stateChanged( ChangeEvent e ) {
  160. if ( e.getSource() instanceof JSlider ) {
  161. int red = redSlider.getValue();
  162. int green = greenSlider.getValue();
  163. int blue = blueSlider.getValue() ;
  164. Color color = new Color (red, green, blue);
  165. getColorSelectionModel().setSelectedColor(color);
  166. // System.out.println("setting model");
  167. }
  168. }
  169. class NumberListener implements DocumentListener, Serializable {
  170. public void insertUpdate(DocumentEvent e) { updatePanel(e); }
  171. public void removeUpdate(DocumentEvent e) { updatePanel(e); }
  172. public void changedUpdate(DocumentEvent e) { }
  173. private void updatePanel(DocumentEvent e) {
  174. int red = redField.getIntegerValue();
  175. int green = greenField.getIntegerValue();
  176. int blue = blueField.getIntegerValue();
  177. Color color = new Color (red, green, blue);
  178. getColorSelectionModel().setSelectedColor(color);
  179. }
  180. }
  181. }