1 package net.sf.openrocket.gui.components;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.beans.PropertyChangeListener;
8 import javax.swing.JButton;
9 import javax.swing.JColorChooser;
10 import javax.swing.JDialog;
11 import javax.swing.JPanel;
13 import net.sf.openrocket.logging.LogHelper;
14 import net.sf.openrocket.startup.Application;
17 * A color chooser button. The currently selected color can be queried or set using the
18 * {@link #getSelectedColor()} and {@link #setSelectedColor(Color)}, and changes listened
19 * to by listening to property events with property name {@link #COLOR_KEY}.
21 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
23 public class ColorChooserButton extends JButton {
24 private static final LogHelper log = Application.getLogger();
26 public static final String COLOR_KEY = "selectedColor";
29 public ColorChooserButton(Color initial) {
31 setSelectedColor(initial);
33 // Add action listener that opens color chooser dialog
34 this.addActionListener(new ActionListener() {
36 public void actionPerformed(ActionEvent e) {
37 log.user("Activating color chooser");
38 final JColorChooser chooser = new JColorChooser(getSelectedColor());
39 chooser.setPreviewPanel(new JPanel());
40 final JDialog dialog = JColorChooser.createDialog(ColorChooserButton.this, "Select color", true,
41 chooser, new ActionListener() {
43 public void actionPerformed(ActionEvent e2) {
44 Color c = chooser.getColor();
45 log.user("User selected color " + c);
46 setSelectedColor(chooser.getColor());
49 log.info("Closing color chooser");
50 dialog.setVisible(true);
57 public void addColorPropertyChangeListener(PropertyChangeListener listener) {
58 this.addPropertyChangeListener(COLOR_KEY, listener);
61 public void setSelectedColor(Color c) {
62 log.debug("Selecting color " + c);
63 this.setIcon(new ColorIcon(c));
64 this.putClientProperty(COLOR_KEY, c);
67 public Color getSelectedColor() {
68 return (Color) this.getClientProperty(COLOR_KEY);