package mjo.components;
import mjo.order.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import javax.swing.colorchooser.*;
import net.miginfocom.swing.*;
//import com.explodingpixels.macwidgets.*;
import net.java.dev.colorchooser.*;
//
//http://storybook.intertec.ch/joomla/index.php/developers/104-clever-color-chooser-for-java-swing
/***/
public class ColorMonitor extends JPanel implements MouseListener{
//
static protected ColorsPanel panelShare = null;
//
static protected JPopupMenu popupShare = null;
//static protected JWindow paletteShare = null;
//
private Color color;
//
public ColorMonitor(Dimension d, int thickness){
this(d, thickness, Color.black);
}
//
public ColorMonitor(Dimension d, int thickness, Color initColor){
setOpaque(true);
setPreferredSize(d);
setBorder(BorderFactory.createLineBorder(Color.black, thickness));
addMouseListener(this);
setColor(initColor);
if(panelShare == null){
createPopupMenu();
}
setComponentPopupMenu(popupShare);
panelShare.registerMonitor(this);
}
static private void createPopupMenu() {
panelShare = new ColorsPanel();
popupShare = new JPopupMenu();
popupShare.add(panelShare);
// paletteShare = new JWindow();
// paletteShare.getContentPane().add(panelShare);
// paletteShare.pack();
// paletteShare.setFocusableWindowState(true);
// paletteShare.addWindowFocusListener(new WindowFocusListener(){
// public void windowLostFocus(WindowEvent e){
// paletteShare.setVisible(false);
// System.out.println("kita");
// }
// public void windowGainedFocus(WindowEvent e){
// }
// });
}
/***/
public void setColor(Color c){
setColor(c, false);
}
public void setColor(Color c, boolean notify){
color = c;
setBackground(c);
//
if(notify)
colorChanged(c);
}
public Color getColor(){
return color;
}
/***/
public void openColorChooser(){
Color choosenColor = JColorChooser.showDialog(this, "color", this.color);
if(choosenColor == null)//
return;
else
setColor(choosenColor);
}
/***/
public void mouseClicked(MouseEvent e){
Point p = e.getPoint();
panelShare.registerMonitor(this);
//SwingUtilities.convertPointToScreen(p, this);
popupShare.show(this, (int)p.getX(), (int)p.getY());
//popupShare.setVisible(true);
// if(isEnabled()){//enable
// Point p = e.getPoint();
// SwingUtilities.convertPointToScreen(p, this);
// paletteShare.setLocation((int)p.getX(), (int)p.getY());
// panelShare.registerMonitor(this);
// paletteShare.setVisible(true);
// paletteShare.requestFocus();
// //popupShare.setVisible(true);
// //openColorChooser();
// }
}
/***/
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){
// if(!isEnabled())
// return;
// Point p = e.getPoint();
// SwingUtilities.convertPointToScreen(p, this);
// palette.setLocation((int)p.getX(), (int)p.getY());
// palette.setVisible(true);
}
public void mouseReleased(MouseEvent e){ }
//
public void colorChanged(Color c){
}
}
class ColorsPanel extends JPanel implements MouseListener {
//
private ColorMonitor monitor = null;
public ColorsPanel() {
MigLayout layout = new MigLayout(
"insets 1,wrap 4",
"[30]",
"[30]");
setLayout(layout);
Color [] colors = ColorOrder.colorTable;
JLabel label;
//
for (Color color : colors) {
label = new JLabel();
label.setOpaque(true);
label.setBackground(color);
label.setFocusable(true);
label.addMouseListener(this);
add(label, "grow");
}
Color [] colorsAdditional = new Color [4];
colorsAdditional[0] = Color.black;
colorsAdditional[1] = Color.white;
colorsAdditional[2] = Color.gray;
colorsAdditional[3] = Color.darkGray;
//
for (Color color : colorsAdditional) {
label = new JLabel();
label.setOpaque(true);
label.setBackground(color);
label.setFocusable(true);
label.addMouseListener(this);
add(label, "grow");
}
add(new JLabel(""), "grow");
add(new JLabel(""), "grow");
label = new JLabel("more");
mjo.core.MjoUtilities.putMiniProperty(label);
label.setOpaque(true);
label.setFocusable(true);
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent evt) {
//ColorMonitor.paletteShare.setVisible(false);
ColorMonitor.popupShare.setVisible(false);
if(monitor != null){
Color choosenColor = JColorChooser.showDialog(monitor, "color", monitor.getColor());
if(choosenColor != null){
monitor.setColor(choosenColor, true);
}
}
}
});
add(label, "grow");
label = new JLabel("close");
mjo.core.MjoUtilities.putMiniProperty(label);
label.setOpaque(true);
label.setFocusable(true);
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent evt) {
//ColorMonitor.paletteShare.setVisible(false);
ColorMonitor.popupShare.setVisible(false);
}
});
add(label, "grow");
}
public void registerMonitor(ColorMonitor cm){
monitor = cm;
}
public void mousePressed(MouseEvent evt) {
}
public void mouseEntered(MouseEvent evt) {
JComponent comp = (JComponent) evt.getSource();
Color color = comp.getBackground();
Color borderColor = Color.black;
comp.setBorder(BorderFactory.createLineBorder(borderColor, 2));
}
public void mouseExited(MouseEvent evt) {
JComponent comp = (JComponent) evt.getSource();
comp.setBorder(null);
}
public void mouseClicked(MouseEvent evt) {
JLabel label = (JLabel) evt.getSource();
Color color = label.getBackground();
if(monitor != null){
monitor.setColor(color, true);
//ColorMonitor.paletteShare.setVisible(false);
ColorMonitor.popupShare.setVisible(false);
}
}
public void mouseReleased(MouseEvent e) {
}
}
|