package fr.mch.mdo.applets;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public final class ColorPickerApplet extends Applet implements MouseListener,
MouseMotionListener, KeyListener
{
/**
*
*/
private static final long serialVersionUID = 2572684428888811676L;
private ColorRectangleCanvas colorRectangleCanvas;
private ColorScrollCanvas colorScrollCanvas;
private TextField hexaColorTextField;
private Label hexaColorLabel;
private Canvas colorCanvas;
private String defaultRGBColor = "C3EBBE"; // "808080";
private Color defaultColor = Color.WHITE;
private String defaultLabelRGBColor = "Code en Hexa";
private String defaultFont = "Arial";
private void processEvent(MouseEvent mouseevent)
{
if (mouseevent.getComponent() instanceof ColorRectangleCanvas)
{
Color color = colorRectangleCanvas.getColorAt(mouseevent.getX(),
mouseevent.getY());
if (color != null)
{
colorScrollCanvas.refresh(color);
colorScrollCanvas.repaint();
color = colorScrollCanvas.getColor();
if (color != null)
{
updateText(color);
colorCanvas.setBackground(color);
}
}
}
if (mouseevent.getComponent() instanceof ColorScrollCanvas)
{
Color color = colorScrollCanvas.getColorAt(mouseevent.getX(),
mouseevent.getY());
updateText(color);
colorScrollCanvas.setCursor(mouseevent.getY());
colorScrollCanvas.repaint();
colorCanvas.setBackground(color);
}
if (mouseevent.getComponent().getName().equals("colorCanvas"))
{
updateText(mouseevent.getComponent().getBackground());
}
if (mouseevent.getComponent().getName().equals("hexaColorLabel"))
{
colorScrollCanvas.refresh(defaultColor);
colorScrollCanvas.repaint();
updateText(defaultColor);
colorCanvas.setBackground(defaultColor);
}
// System.out.println("processEvent : " + hexaColorTextField.getText());
}
public void mouseClicked(MouseEvent mouseevent)
{
processEvent(mouseevent);
}
public void mousePressed(MouseEvent mouseevent)
{
}
public void mouseDragged(MouseEvent mouseevent)
{
processEvent(mouseevent);
}
public void paint(Graphics g)
{
}
public void mouseReleased(MouseEvent mouseevent)
{
}
public void mouseMoved(MouseEvent mouseevent)
{
}
public final void updateText(Color color)
{
String s = Integer.toHexString(color.getRGB() & 0xffffff).toUpperCase();
s = "000000" + s;
s = s.substring(s.length() - 6);
hexaColorTextField.setText(s);
}
public void mouseEntered(MouseEvent mouseevent)
{
}
public void mouseExited(MouseEvent mouseevent)
{
}
private void retrieveParameters()
{
if (getParameter("defaultRGBColor") != null)
defaultRGBColor = getParameter("defaultRGBColor");
if (getParameter("defaultLabelRGBColor") != null)
defaultLabelRGBColor = getParameter("defaultLabelRGBColor");
if (getParameter("defaultFont") != null)
defaultFont = getParameter("defaultFont");
}
public void init()
{
retrieveParameters();
defaultColor = new Color(Integer.parseInt(defaultRGBColor.substring(0,
2), 16), Integer.parseInt(defaultRGBColor.substring(2, 4), 16),
Integer.parseInt(defaultRGBColor.substring(4, 6), 16));
setLayout(new BorderLayout());
setBackground(Color.white);
Panel centerPanel = new Panel(new FlowLayout(FlowLayout.CENTER,
getWidth() * 1 / 100, getHeight() * 1 / 100));
colorRectangleCanvas = new ColorRectangleCanvas(getWidth() * 83 / 100,
getHeight() * 83 / 100);
colorRectangleCanvas.addMouseMotionListener(this);
colorRectangleCanvas.addMouseListener(this);
centerPanel.add(colorRectangleCanvas);
colorScrollCanvas = new ColorScrollCanvas(getWidth() * 7 / 100,
getHeight() * 83 / 100, defaultColor);
colorScrollCanvas.addMouseMotionListener(this);
colorScrollCanvas.addMouseListener(this);
centerPanel.add(colorScrollCanvas);
add(centerPanel, BorderLayout.CENTER);
Panel southPanel = new Panel(new FlowLayout(FlowLayout.CENTER,
getWidth() * 1 / 100, getHeight() * 1 / 100));
int fontSize = (int) Math.round(3 * 12.0 * getHeight() * 10 / 100
/ 72.0);
hexaColorLabel = new Label(defaultLabelRGBColor);
hexaColorLabel.setName("hexaColorLabel");
hexaColorLabel.setSize(getWidth() * 20 / 100, getHeight() * 10 / 100);
hexaColorLabel.setFont(new Font(defaultFont, Font.PLAIN, fontSize));
hexaColorLabel.addMouseListener(this);
southPanel.add(hexaColorLabel);
hexaColorTextField = new TextField(defaultRGBColor, defaultRGBColor
.length());
hexaColorTextField.setName("hexaColorTextField");
hexaColorTextField.setSize(getWidth() * 20 / 100,
getHeight() * 10 / 100);
hexaColorTextField.setFont(new Font(defaultFont, Font.PLAIN, fontSize));
hexaColorTextField.addKeyListener(this);
southPanel.add(hexaColorTextField);
colorCanvas = new Canvas();
colorCanvas.setName("colorCanvas");
colorCanvas.setSize(getWidth() * 10 / 100, getHeight() * 10 / 100);
colorCanvas.setBackground(defaultColor);
colorCanvas.addMouseListener(this);
southPanel.add(colorCanvas);
add(southPanel, BorderLayout.SOUTH);
}
public String getColorRGB()
{
return hexaColorTextField.getText();
}
/*
* (non-Javadoc)
*
* @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
*/
public void keyPressed(KeyEvent keyEvent)
{
}
/*
* (non-Javadoc)
*
* @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
*/
public void keyReleased(KeyEvent keyEvent)
{
if (keyEvent.getComponent().getName().equals("hexaColorTextField"))
{
String temp = hexaColorTextField.getText();
int previousCaret = hexaColorTextField.getCaretPosition();
hexaColorTextField.setText(temp.toUpperCase());
if (temp.length() < 6)
{
temp += "000000";
}
temp = temp.substring(0, 6);
try
{
Integer.parseInt(temp, 16);
hexaColorTextField.setText(temp);
}
catch (NumberFormatException nfe)
{
hexaColorTextField.setText(defaultRGBColor);
}
String RGBColor = hexaColorTextField.getText();
Color color = new Color(Integer.parseInt(RGBColor.substring(0, 2),
16), Integer.parseInt(RGBColor.substring(2, 4), 16),
Integer.parseInt(RGBColor.substring(4, 6), 16));
colorScrollCanvas.refresh(color);
colorScrollCanvas.repaint();
updateText(color);
hexaColorTextField.setCaretPosition(previousCaret);
colorCanvas.setBackground(color);
// System.out.println("keyReleased : " +
// hexaColorTextField.getText());
}
}
/*
* (non-Javadoc)
*
* @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
*/
public void keyTyped(KeyEvent keyEvent)
{
}
}