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