package jas.util; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.colorchooser.AbstractColorChooserPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * * @author tonyj */ public class ARGBColorChooserPanel extends AbstractColorChooserPanel implements ChangeListener { protected JSlider redSlider; protected JSlider greenSlider; protected JSlider blueSlider; protected JSlider alphaSlider; protected JSpinner redSpinner; protected JSpinner blueSpinner; protected JSpinner greenSpinner; protected JSpinner alphaSpinner; private final int minValue = 0; private final int maxValue = 255; private boolean isAdjusting = false; public ARGBColorChooserPanel() { super(); } private void setColor(Color color) { int red = color.getRed(); int blue = color.getBlue(); int green = color.getGreen(); int alpha = color.getAlpha(); if (redSlider.getValue() != red) { redSlider.setValue(red); } if (greenSlider.getValue() != green) { greenSlider.setValue(green); } if (blueSlider.getValue() != blue) { blueSlider.setValue(blue); } if (alphaSlider.getValue() != alpha) { alphaSlider.setValue(alpha); } if (((Integer)redSpinner.getValue()).intValue() != red) { redSpinner.setValue(new Integer(red)); } if (((Integer)greenSpinner.getValue()).intValue() != green) { greenSpinner.setValue(new Integer(green)); } if (((Integer)blueSpinner.getValue()).intValue() != blue) { blueSpinner.setValue(new Integer(blue)); } if (((Integer)alphaSpinner.getValue()).intValue() != alpha) { alphaSpinner.setValue(new Integer(alpha)); } } public String getDisplayName() { return "ARGB"; } public Icon getSmallDisplayIcon() { return null; } public Icon getLargeDisplayIcon() { return null; } protected void buildChooser() { setLayout(new BorderLayout()); Color color = getColorFromModel(); JPanel panel = new JPanel(); GridBagLayout layout = new GridBagLayout(); GridBagConstraints con = new GridBagConstraints(); panel.setLayout(layout); add(panel, BorderLayout.CENTER); JLabel l = new JLabel("Red"); con.gridwidth = 1; layout.setConstraints(l, con); panel.add(l); redSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, color.getRed()); redSlider.setMajorTickSpacing(85); redSlider.setMinorTickSpacing(17); redSlider.setPaintTicks(true); redSlider.setPaintLabels(true); layout.setConstraints(redSlider, con); l.setLabelFor(redSlider); panel.add(redSlider); redSpinner = new JSpinner( new SpinnerNumberModel(color.getRed(), minValue, maxValue, 1)); JPanel redSpinnerHolder = new JPanel(new FlowLayout()); redSpinner.addChangeListener(this); redSpinnerHolder.add(redSpinner); con.gridwidth = GridBagConstraints.REMAINDER; layout.setConstraints(redSpinnerHolder, con); panel.add(redSpinnerHolder); l = new JLabel("Green"); con.gridwidth = 1; layout.setConstraints(l, con); panel.add(l); greenSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, color.getGreen()); greenSlider.setMajorTickSpacing(85); greenSlider.setMinorTickSpacing(17); greenSlider.setPaintTicks(true); greenSlider.setPaintLabels(true); layout.setConstraints(greenSlider, con); panel.add(greenSlider); greenSpinner = new JSpinner( new SpinnerNumberModel(color.getGreen(), minValue, maxValue, 1)); l.setLabelFor(greenSlider); JPanel greenSpinnerHolder = new JPanel(new FlowLayout()); greenSpinnerHolder.add(greenSpinner); greenSpinner.addChangeListener(this); con.gridwidth = GridBagConstraints.REMAINDER; layout.setConstraints(greenSpinnerHolder, con); panel.add(greenSpinnerHolder); l = new JLabel("Blue"); con.gridwidth = 1; layout.setConstraints(l, con); panel.add(l); blueSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, color.getBlue()); blueSlider.setMajorTickSpacing(85); blueSlider.setMinorTickSpacing(17); blueSlider.setPaintTicks(true); blueSlider.setPaintLabels(true); layout.setConstraints(blueSlider, con); panel.add(blueSlider); blueSpinner = new JSpinner( new SpinnerNumberModel(color.getBlue(), minValue, maxValue, 1)); l.setLabelFor(blueSlider); JPanel blueSpinnerHolder = new JPanel(new FlowLayout()); blueSpinnerHolder.add(blueSpinner); blueSpinner.addChangeListener(this); con.gridwidth = GridBagConstraints.REMAINDER; layout.setConstraints(blueSpinnerHolder, con); panel.add(blueSpinnerHolder); l = new JLabel("Alpha"); con.gridwidth = 1; layout.setConstraints(l, con); panel.add(l); alphaSlider = new JSlider(JSlider.HORIZONTAL, 0, 255, color.getAlpha()); alphaSlider.setMajorTickSpacing(85); alphaSlider.setMinorTickSpacing(17); alphaSlider.setPaintTicks(true); alphaSlider.setPaintLabels(true); layout.setConstraints(alphaSlider, con); panel.add(alphaSlider); alphaSpinner = new JSpinner( new SpinnerNumberModel(color.getAlpha(), minValue, maxValue, 1)); l.setLabelFor(alphaSlider); JPanel alphaSpinnerHolder = new JPanel(new FlowLayout()); alphaSpinnerHolder.add(alphaSpinner); alphaSpinner.addChangeListener(this); con.gridwidth = GridBagConstraints.REMAINDER; layout.setConstraints(alphaSpinnerHolder, con); panel.add(alphaSpinnerHolder); redSlider.addChangeListener(this); greenSlider.addChangeListener(this); blueSlider.addChangeListener(this); alphaSlider.addChangeListener(this); } public void updateChooser() { if (!isAdjusting) { isAdjusting = true; setColor(getColorFromModel()); isAdjusting = false; } } public void stateChanged(ChangeEvent e) { if (e.getSource() instanceof JSlider && !isAdjusting) { int red = redSlider.getValue(); int green = greenSlider.getValue(); int blue = blueSlider.getValue() ; int alpha = alphaSlider.getValue() ; Color color = new Color(red, green, blue, alpha); getColorSelectionModel().setSelectedColor(color); } else if (e.getSource() instanceof JSpinner && !isAdjusting) { int red = ((Integer)redSpinner.getValue()).intValue(); int green = ((Integer)greenSpinner.getValue()).intValue(); int blue = ((Integer)blueSpinner.getValue()).intValue(); int alpha = ((Integer)alphaSpinner.getValue()).intValue(); Color color = new Color(red, green, blue, alpha); getColorSelectionModel().setSelectedColor(color); } } }