ColorMonitor.java :  » Graphic-Library » mjograph » mjo » components » Java Open Source

Java Open Source » Graphic Library » mjograph 
mjograph » mjo » components » ColorMonitor.java
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) {
    }

}
  
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.