/*
* @(#)HSBChooser.java
*
* Copyright (c) 2005-2010 Werner Randelshofer, Immensee, Switzerland.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Werner Randelshofer. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entehue into
* with Werner Randelshofer.
*/
package ch.randelshofer.quaqua.colorchooser;
import ch.randelshofer.quaqua.border.VisualMarginBorder;
import ch.randelshofer.quaqua.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.colorchooser.*;
import javax.swing.plaf.*;
/**
* A ColorChooser with HSB sliders.
*
* @author Werner Randelshofer
* @version $Id: HSBChooser.java 414 2011-07-29 20:55:05Z wrandelshofer $
*/
public class HSBChooser
extends AbstractColorChooserPanel
implements UIResource {
private ColorSliderModel ccModel = new HSBColorSliderModel();
private int updatingChooser;
/** Creates new form. */
public HSBChooser() {
}
protected void buildChooser() {
initComponents();
if (QuaquaManager.getProperty("java.version").startsWith("1.3")) {
hueField.setColumns(4);
saturationField.setColumns(4);
brightnessField.setColumns(4);
}
//
Font font = UIManager.getFont("ColorChooser.font");
hueLabel.setFont(font);
hueSlider.setFont(font);
hueField.setFont(font);
hueFieldLabel.setFont(font);
saturationLabel.setFont(font);
saturationSlider.setFont(font);
saturationField.setFont(font);
saturationFieldLabel.setFont(font);
brightnessLabel.setFont(font);
brightnessSlider.setFont(font);
brightnessField.setFont(font);
brightnessFieldLabel.setFont(font);
//
int textSliderGap = UIManager.getInt("ColorChooser.textSliderGap");
if (textSliderGap != 0) {
Border fieldBorder = new EmptyBorder(0,textSliderGap,0,0);
hueFieldPanel.setBorder(fieldBorder);
saturationFieldPanel.setBorder(fieldBorder);
brightnessFieldPanel.setBorder(fieldBorder);
}
ccModel.configureColorSlider(0, hueSlider);
ccModel.configureColorSlider(1, saturationSlider);
ccModel.configureColorSlider(2, brightnessSlider);
hueField.setText(Integer.toString(hueSlider.getValue()));
saturationField.setText(Integer.toString(saturationSlider.getValue()));
brightnessField.setText(Integer.toString(brightnessSlider.getValue()));
Insets borderMargin = (Insets) UIManager.getInsets("Component.visualMargin").clone();
borderMargin.left = 3 - borderMargin.left;
hueFieldLabel.putClientProperty("Quaqua.Component.visualMargin",borderMargin);
saturationFieldLabel.putClientProperty("Quaqua.Component.visualMargin",borderMargin);
brightnessFieldLabel.putClientProperty("Quaqua.Component.visualMargin",borderMargin);
new ColorSliderTextFieldHandler(hueField, ccModel, 0);
new ColorSliderTextFieldHandler(saturationField, ccModel, 1);
new ColorSliderTextFieldHandler(brightnessField, ccModel, 2);
ccModel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
setColorToModel(ccModel.getColor());
}
});
hueField.setMinimumSize(hueField.getPreferredSize());
saturationField.setMinimumSize(saturationField.getPreferredSize());
brightnessField.setMinimumSize(brightnessField.getPreferredSize());
VisualMarginBorder bm = new VisualMarginBorder(false,false,true,false);
hueLabel.setBorder(bm);
saturationLabel.setBorder(bm);
brightnessLabel.setBorder(bm);
}
public String getDisplayName() {
return UIManager.getString("ColorChooser.hsbSliders");
}
public Icon getLargeDisplayIcon() {
return UIManager.getIcon("ColorChooser.colorSlidersIcon");
}
public Icon getSmallDisplayIcon() {
return getLargeDisplayIcon();
}
public void updateChooser() {
updatingChooser++;
ccModel.setColor(getColorFromModel());
updatingChooser--;
}
public void setColorToModel(Color color) {
if (updatingChooser == 0) {
getColorSelectionModel().setSelectedColor(color);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
hueLabel = new javax.swing.JLabel();
hueSlider = new javax.swing.JSlider();
hueFieldPanel = new javax.swing.JPanel();
hueField = new javax.swing.JTextField();
hueFieldLabel = new javax.swing.JLabel();
saturationLabel = new javax.swing.JLabel();
saturationSlider = new javax.swing.JSlider();
saturationFieldPanel = new javax.swing.JPanel();
saturationField = new javax.swing.JTextField();
saturationFieldLabel = new javax.swing.JLabel();
brightnessLabel = new javax.swing.JLabel();
brightnessSlider = new javax.swing.JSlider();
brightnessFieldPanel = new javax.swing.JPanel();
brightnessField = new javax.swing.JTextField();
brightnessFieldLabel = new javax.swing.JLabel();
springPanel = new javax.swing.JPanel();
setLayout(new java.awt.GridBagLayout());
hueLabel.setText(UIManager.getString("ColorChooser.hsbHueText"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0);
add(hueLabel, gridBagConstraints);
hueSlider.setMajorTickSpacing(359);
hueSlider.setMaximum(359);
hueSlider.setMinorTickSpacing(180);
hueSlider.setPaintTicks(true);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
add(hueSlider, gridBagConstraints);
hueFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
hueField.setColumns(3);
hueField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
hueField.setText("0");
hueField.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
fieldFocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt) {
hueFieldFocusLost(evt);
}
});
hueFieldPanel.add(hueField);
hueFieldLabel.setText("\u00b0");
hueFieldPanel.add(hueFieldLabel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
add(hueFieldPanel, gridBagConstraints);
saturationLabel.setText(UIManager.getString("ColorChooser.hsbSaturationText"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0);
add(saturationLabel, gridBagConstraints);
saturationSlider.setMajorTickSpacing(100);
saturationSlider.setMinorTickSpacing(50);
saturationSlider.setPaintTicks(true);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
add(saturationSlider, gridBagConstraints);
saturationFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
saturationField.setColumns(3);
saturationField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
saturationField.setText("0");
saturationField.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
fieldFocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt) {
saturationFieldFocusLost(evt);
}
});
saturationFieldPanel.add(saturationField);
saturationFieldLabel.setText("%");
saturationFieldPanel.add(saturationFieldLabel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
add(saturationFieldPanel, gridBagConstraints);
brightnessLabel.setText(UIManager.getString("ColorChooser.hsbBrightnessText"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0);
add(brightnessLabel, gridBagConstraints);
brightnessSlider.setMajorTickSpacing(100);
brightnessSlider.setMinorTickSpacing(50);
brightnessSlider.setPaintTicks(true);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
add(brightnessSlider, gridBagConstraints);
brightnessFieldPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));
brightnessField.setColumns(3);
brightnessField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
brightnessField.setText("0");
brightnessField.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
fieldFocusGained(evt);
}
public void focusLost(java.awt.event.FocusEvent evt) {
brightnessFieldFocusLost(evt);
}
});
brightnessFieldPanel.add(brightnessField);
brightnessFieldLabel.setText("%");
brightnessFieldPanel.add(brightnessFieldLabel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridheight = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
add(brightnessFieldPanel, gridBagConstraints);
springPanel.setLayout(new java.awt.BorderLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 100;
gridBagConstraints.weighty = 1.0;
add(springPanel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
private void fieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_fieldFocusGained
((JTextField) evt.getSource()).selectAll();
}//GEN-LAST:event_fieldFocusGained
private void brightnessFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_brightnessFieldFocusLost
brightnessField.setText(Integer.toString(ccModel.getBoundedRangeModel(2).getValue()));
}//GEN-LAST:event_brightnessFieldFocusLost
private void saturationFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_saturationFieldFocusLost
saturationField.setText(Integer.toString(ccModel.getBoundedRangeModel(1).getValue()));
}//GEN-LAST:event_saturationFieldFocusLost
private void hueFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_hueFieldFocusLost
hueField.setText(Integer.toString(ccModel.getBoundedRangeModel(0).getValue()));
}//GEN-LAST:event_hueFieldFocusLost
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField brightnessField;
private javax.swing.JLabel brightnessFieldLabel;
private javax.swing.JPanel brightnessFieldPanel;
private javax.swing.JLabel brightnessLabel;
private javax.swing.JSlider brightnessSlider;
private javax.swing.JTextField hueField;
private javax.swing.JLabel hueFieldLabel;
private javax.swing.JPanel hueFieldPanel;
private javax.swing.JLabel hueLabel;
private javax.swing.JSlider hueSlider;
private javax.swing.JTextField saturationField;
private javax.swing.JLabel saturationFieldLabel;
private javax.swing.JPanel saturationFieldPanel;
private javax.swing.JLabel saturationLabel;
private javax.swing.JSlider saturationSlider;
private javax.swing.JPanel springPanel;
// End of variables declaration//GEN-END:variables
}