4
* Copyright (c) 2009 JAM Development Team
6
* This package is distributed under the Lesser Gnu Public Licence (LGPL)
10
package figtree.ui.components;
14
import java.awt.event.ActionListener;
15
import java.awt.event.ActionEvent;
16
import java.io.StringWriter;
17
import java.io.PrintWriter;
20
* @author Andrew Rambaut
23
public class ColorWellButton extends JButton {
24
private JColorChooser chooser;
25
private String colorChooserTitle;
27
public ColorWellButton(Color color, final String colorChooserTitle) {
30
this.colorChooserTitle = colorChooserTitle;
32
putClientProperty("JButton.buttonType", "square");
33
setBorderPainted(true);
34
// putClientProperty("Quaqua.Button.style", "colorWell");
35
setIcon(new ColorWell(color));
36
setMargin(new Insets(10, 10, 10, 10));
37
addActionListener(new ActionListener() {
38
public void actionPerformed(ActionEvent evt) {
39
chooserButtonActionPerformed(evt);
44
public Color getSelectedColor() {
45
return ((ColorWell)getIcon()).color;
48
public void setSelectedColor(Color color) {
49
((ColorWell)getIcon()).color = color;
53
private void chooserButtonActionPerformed(java.awt.event.ActionEvent evt) {
55
// System.out.println("chooserButtonActionPerformed "+evt);
56
if (chooser == null) {
57
chooser = new JColorChooser();
59
chooser.setSelectionModel(new DefaultColorSelectionModel() {
60
public void setSelectedColor(Color c) {
61
new Throwable().printStackTrace();
62
super.setSelectedColor(c);
66
//JOptionPane.showMessageDialog(this, "Made a new chooser");
68
Color color = chooser.showDialog(this, colorChooserTitle, ((ColorWell)getIcon()).color);
70
setSelectedColor(color);
72
} catch (Throwable t) {
73
StringWriter sw = new StringWriter();
74
PrintWriter pw = new PrintWriter(sw);
75
t.printStackTrace(pw);
77
JOptionPane.showMessageDialog(this, "JColorChooser Failed "+sw.toString());
82
private class ColorWell implements Icon {
85
ColorWell(Color color) {
90
public int getIconWidth() {
94
public int getIconHeight() {
98
public void paintIcon(Component c, Graphics g, int x, int y) {
99
if (color == null) return;
101
g.fillRect(x, y, getIconWidth(), getIconHeight());
102
g.setColor(color.darker());
103
g.drawRect(x, y, getIconWidth() - 1, getIconHeight() - 1);