/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package test.check;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ComboBoxEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingUtilities;
/**
*
* @author Administrator
*/
public class ColorComboBox extends JComboBox {
public static final String PROP_COLOR = "color"; // NOI18N
public static final Value CUSTOM_COLOR = new Value(loc("Custom"), null); // NOI18N
private static Map<Color, String> colorMap = new HashMap<Color, String>();
static {
colorMap.put(Color.BLACK, loc("Black")); // NOI18N
colorMap.put(Color.BLUE, loc("Blue")); // NOI18N
colorMap.put(Color.CYAN, loc("Cyan")); // NOI18N
colorMap.put(Color.DARK_GRAY, loc("Dark_Gray")); // NOI18N
colorMap.put(Color.GRAY, loc("Gray")); // NOI18N
colorMap.put(Color.GREEN, loc("Green")); // NOI18N
colorMap.put(Color.LIGHT_GRAY, loc("Light_Gray")); // NOI18N
colorMap.put(Color.MAGENTA, loc("Magenta")); // NOI18N
colorMap.put(Color.ORANGE, loc("Orange")); // NOI18N
colorMap.put(Color.PINK, loc("Pink")); // NOI18N
colorMap.put(Color.RED, loc("Red")); // NOI18N
colorMap.put(Color.WHITE, loc("White")); // NOI18N
colorMap.put(Color.YELLOW, loc("Yellow")); // NOI18N
}
private static Object[] content = new Object[] { new Value(Color.BLACK),
new Value(Color.BLUE), new Value(Color.CYAN),
new Value(Color.DARK_GRAY), new Value(Color.GRAY),
new Value(Color.GREEN), new Value(Color.LIGHT_GRAY),
new Value(Color.MAGENTA), new Value(Color.ORANGE),
new Value(Color.PINK), new Value(Color.RED),
new Value(Color.WHITE), new Value(Color.YELLOW), CUSTOM_COLOR };
private Color lastColor;
/** Creates a new instance of ColorChooser */
public ColorComboBox() {
super(content);
setRenderer(new Renderer());
setEditable(true);
setEditor(new Renderer());
setSelectedItem(new Value(null, null));
addActionListener((ActionEvent ev) -> {
if (getSelectedItem() == CUSTOM_COLOR) {
Color c = JColorChooser.showDialog(SwingUtilities
.getAncestorOfClass(Dialog.class,
ColorComboBox.this), loc("SelectColor"),
lastColor);
if (c != null)
setColor(c);
} else {
lastColor = ((Value) getSelectedItem()).color;
}
ColorComboBox.this.firePropertyChange(PROP_COLOR, null, null);
});
}
public void setInheritedColor(Color color) {
Object[] ncontent = new Object[content.length];
System.arraycopy(content, 0, ncontent, 0, content.length);
if (color != null)
ncontent[content.length - 1] = new Value(
loc("CTL_Inherited_Color"), color // NOI18N
);
else
ncontent[content.length - 1] = new Value(loc("CTL_None_Color"),
null // NOI18N
);
setModel(new DefaultComboBoxModel(ncontent));
}
public void setColor(Color color) {
if (color == null) {
setSelectedIndex(content.length - 1);
lastColor = ((Value) getItemAt(content.length - 1)).color;
} else {
setSelectedItem(new Value(color));
lastColor = color;
}
}
public Color getColor() {
if (getSelectedIndex() == (content.length - 1))
return null;
return ((Value) getSelectedItem()).color;
}
private static String loc(String key) {
return key;
}
// innerclasses ............................................................
public static class Value {
String text;
Color color;
Value(Color color) {
this.color = color;
text = colorMap.get(color);
if (text != null)
return;
StringBuffer sb = new StringBuffer();
sb.append('[').append(color.getRed()).append(',').append(
color.getGreen()).append(',').append(color.getBlue())
.append(']');
text = sb.toString();
}
Value(String text, Color color) {
this.text = text;
this.color = color;
}
}
private class Renderer extends JComponent implements ListCellRenderer,
ComboBoxEditor {
private int SIZE = 9;
private Value value;
Renderer() {
setPreferredSize(new Dimension(50, getFontMetrics(
ColorComboBox.this.getFont()).getHeight() + 2));
setOpaque(true);
setFocusable(true);
// setBorder(new SubstanceBorder());
}
@Override
public void paint(Graphics g) {
Color oldColor = g.getColor();
Dimension size = getSize();
if (isFocusOwner())
g.setColor(SystemColor.textHighlight);
else
g.setColor(getBackground());
g.fillRect(0, 0, size.width, size.height);
int i = (size.height - SIZE) / 2;
if (value.color != null) {
g.setColor(Color.black);
g.drawRect(i, i, SIZE, SIZE);
g.setColor(value.color);
g.fillRect(i + 1, i + 1, SIZE - 1, SIZE - 1);
}
if (value.text != null) {
if (isFocusOwner())
g.setColor(SystemColor.textHighlightText);
else
g.setColor(getForeground());
if (value.color != null)
g.drawString(value.text, i + SIZE + 5, i + SIZE);
else
g.drawString(value.text, 5, i + SIZE);
}
g.setColor(oldColor);
}
@Override
public void setEnabled(boolean enabled) {
setBackground(enabled ? SystemColor.text : SystemColor.control);
super.setEnabled(enabled);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
this.value = (Value) value;
setEnabled(list.isEnabled());
setBackground(isSelected ? SystemColor.textHighlight
: SystemColor.text);
setForeground(isSelected ? SystemColor.textHighlightText
: SystemColor.textText);
return this;
}
public Component getEditorComponent() {
setEnabled(ColorComboBox.this.isEnabled());
setBackground(ColorComboBox.this.isFocusOwner() ? SystemColor.textHighlight
: SystemColor.text);
setForeground(ColorComboBox.this.isFocusOwner() ? SystemColor.textHighlightText
: SystemColor.textText);
return this;
}
public void setItem(Object anObject) {
this.value = (Value) anObject;
}
public Object getItem() {
return value;
}
public void selectAll() {
}
public void addActionListener(ActionListener l) {
}
public void removeActionListener(ActionListener l) {
}
}
}