package com.revolsys.swing.component;
import java.awt.BorderLayout;
import java.awt.Color;
import java.util.Hashtable;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.colorchooser.AbstractColorChooserPanel;
import javax.swing.colorchooser.ColorSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.revolsys.awt.WebColors;
import com.revolsys.swing.layout.GroupLayouts;
public class ColorAlphaPanel extends AbstractColorChooserPanel implements ChangeListener {
private static final long serialVersionUID = 3533569797414988165L;
private final JSlider alphaSlider;
public ColorAlphaPanel() {
setLayout(new BorderLayout());
this.alphaSlider = new JSlider(0, 255, 255);
this.alphaSlider.setMajorTickSpacing(64);
this.alphaSlider.setMinorTickSpacing(16);
this.alphaSlider.setPaintTicks(true);
this.alphaSlider.setToolTipText("Alpha");
this.alphaSlider.addChangeListener(this);
this.alphaSlider.setPaintLabels(true);
final Hashtable<Integer, JComponent> labels = new Hashtable<>();
labels.put(0, new JLabel("0"));
labels.put(64, new JLabel("64"));
labels.put(128, new JLabel("128"));
labels.put(192, new JLabel("192"));
labels.put(255, new JLabel("255"));
this.alphaSlider.setLabelTable(labels);
add(new JLabel("Alpha (Opacity)"));
add(this.alphaSlider);
GroupLayouts.makeColumns(this, 2, true);
}
@Override
protected void buildChooser() {
}
@Override
public String getDisplayName() {
return "Alpha";
}
@Override
public Icon getLargeDisplayIcon() {
return new ImageIcon();
}
@Override
public Icon getSmallDisplayIcon() {
return new ImageIcon();
}
@Override
public void stateChanged(final ChangeEvent e) {
final Color color = getColorFromModel();
final Color newColor = WebColors.newAlpha(color, this.alphaSlider.getValue());
final ColorSelectionModel colorSelectionModel = getColorSelectionModel();
colorSelectionModel.setSelectedColor(newColor);
}
@Override
public void updateChooser() {
final Color color = getColorFromModel();
final int alpha = color.getAlpha();
this.alphaSlider.setValue(alpha);
}
}