package magic.ui.widget; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JColorChooser; import magic.translate.MText; @SuppressWarnings("serial") public class ColorButton extends JButton { // translatable strings private static final String _S1 = "Choose a color"; private final MouseAdapter mouseListener; private final AbstractAction clickAction; public ColorButton(final Color defaultColor) { setBackground(defaultColor); setPreferredSize(new Dimension(48, 24)); this.clickAction = getSelectColorAction(); addActionListener(clickAction); this.mouseListener = getMouseListener(); addMouseListener(mouseListener); } private AbstractAction getSelectColorAction() { return new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { final Color newColor = JColorChooser.showDialog(null, MText.get(_S1), getBackground()); if (newColor != null) { setBackground(newColor); } } }; } private MouseAdapter getMouseListener() { return new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { super.mouseEntered(e); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } @Override public void mouseExited(MouseEvent e) { super.mouseExited(e); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } }; } public Color getColor() { return getBackground(); } public void setColor(Color aColor) { setBackground(aColor); } public void setLocked(boolean isLocked) { removeActionListener(clickAction); removeMouseListener(mouseListener); if (!isLocked) { addMouseListener(mouseListener); addActionListener(clickAction); } } }