经过这么多天的学习,这是我做出的第一个JAVA程序。自己的想法能用各种代码的组合实现出来,真的很有成就感啊,哈哈。
    在你想要的颜色上面点下ALT键,就这么简单。
    等有空了,我还想在这上面多加点功能,如果你有了好的想法,请告诉我一下。谢谢。
    .exe文件使用exe4j做的,在我的机子上能用,没有别的机子进行测试,要是不能用,请通知我。
    今天对前几天做的取色器进行了修改,去掉了一大堆重复的代码,添加了一个JLabel,可以对选中的颜色进行即时显示,防止点错,欢迎大家的使用。
    经过了这么多天,我对面向对象还是不是很明白,写的代码的结构也不好,谁能帮我改一下啊,谢谢了。
    界面如下:    放在这: http://download.csdn.net/source/1543399
    代码如下:
/**Java取色器 v1.1
终于回到家了,对前几天做的取色器进行了修改,去掉了一大堆重复的代码,
添加了一个JLabel,可以对选中的颜色进行即时显示,防止点错,欢迎大家的使用。
**/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.MouseInfo.*;
import java.awt.datatransfer.*; 
public class ColorTest extends JFrame implements ActionListener,KeyListener
{
Robot robot;
Point mousepoint;
Integer R=0,G=0,B=0;
Integer X=0,Y=0;
Color pixel = new Color(0,0,0);
String s16="";
MouseInfo mouseinfo=null;
JLabel JR,JG,JB,JX,JY,J16,JCol;
JTextField JTFR,JTFG,JTFB,JTFX,JTFY,JTF16;
JButton JCopy,JExit;
JPanel pix=new JPanel(),zb=new JPanel(),pb=new JPanel();

//主窗口上菜单的建造。
public void setMenuBar()
{
JMenuBar myBar=new JMenuBar();
JMenu helpMenu=new JMenu("帮助");
JMenuItem help_About=new JMenuItem("关于");

this.setJMenuBar(myBar);
myBar.add(helpMenu);
helpMenu.add(help_About);
help_About.addActionListener(this);
}
//界面各种组件的初始化以及布局。
public void ColorTest()
{
setTitle("DarkMao");
JR=new JLabel("R: ");
JG=new JLabel("G: ");
JB=new JLabel("B: ");
JX=new JLabel("X: ");
JY=new JLabel("Y: ");
J16=new JLabel("十六进制表示:");
JCol=new JLabel("■■■■■");
JTFR=new JTextField(5);
JTFG=new JTextField(5);
JTFB=new JTextField(5);
JTF16=new JTextField(6);
JTFX=new JTextField(5);
JTFY=new JTextField(5);
JCopy=new JButton("复制");
JExit=new JButton("退出");
setFocusable(true);
addKeyListener(this);
JCopy.addActionListener(this);
JExit.addActionListener(this);
JCopy.addKeyListener(this);
JExit.addKeyListener(this);
JTFR.addKeyListener(this);
JTFG.addKeyListener(this);
JTFB.addKeyListener(this);
JTF16.addKeyListener(this);
JTFX.addKeyListener(this);
JTFY.addKeyListener(this);
pix.setLayout(new FlowLayout());
zb.setLayout(new FlowLayout());
pb.setLayout(new FlowLayout());
pix.add(JR);
pix.add(JTFR);
pix.add(JG);
pix.add(JTFG);
pix.add(JB);
pix.add(JTFB);
zb.add(JX);
zb.add(JTFX);
zb.add(JY);
zb.add(JTFY);
pix.add(JCol);
pix.add(J16);
pix.add(JTF16);
pb.add(JCopy);
pb.add(JExit);
setLayout(new BorderLayout());
add(pix,BorderLayout.CENTER);
add(zb,BorderLayout.NORTH);
add(pb,BorderLayout.SOUTH);
}
//把当前选中的颜色的十六进制表示复制到系统的剪贴板中,方便使用。
//输入的参数就是待放入剪贴板的数据。
public static void setClipboard(String str) 
{  
   StringSelection ss = new StringSelection(str);  
   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);  
  } 
  //对按钮和菜单进行响应。
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==JCopy) 
{ if(s16=="")
{
JOptionPane.showMessageDialog(null,"请在你想要的颜色上面按Alt键进行选取。","提示",JOptionPane.INFORMATION_MESSAGE);
}
else
{
setClipboard(s16);
JOptionPane.showMessageDialog(null,"你所选取的16进制颜色代码 "+s16+" 已经复制到剪贴板中,请在你想用的地方按Ctrl+V粘贴。","提示",JOptionPane.INFORMATION_MESSAGE);
}

else if(e.getSource()==JExit) 

JOptionPane.showMessageDialog(null,"谢谢您的使用,这是我用java做的第一个小程序,如果你在使用过程用有了什么好玩的想法,一定要告诉我啊!","谢谢使用",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);

if(e.getActionCommand()=="关于")
JOptionPane.showMessageDialog(this,"DarkMao 取色器 1.0\n和PS里的拾色器功能类似,但是使用方便,不用先截图再打开PS了,希望你能喜欢。\n想知道鼠标在的这一点的颜色吗?点下ALT键看看吧。\n如果你在使用过程中有了什么主意的话,请告诉我一下,谢谢。\nE-mail: [email protected]","关于我",JOptionPane.INFORMATION_MESSAGE);
}
//当按键放开的时候才对案件进行响应,如果不想一下一下的点,
//可以把里边的代码剪切到keyPressed()中,这样只要按下alt键同时移动鼠标就可以了。
public void keyReleased(KeyEvent e)
{
//int code=e.getKeyCode();
//System.out.println(code);
if(e.getKeyCode()==18)
{
try{
Robot robot = new Robot();
mousepoint = mouseinfo.getPointerInfo().getLocation();
//System.out.println(mousepoint);
   pixel = robot.getPixelColor(mousepoint.x,mousepoint.y);
   X = mousepoint.x;
   Y = mousepoint.y;
R = pixel.getRed();
G = pixel.getGreen();
B = pixel.getBlue();
JTFR.setText(R.toString());
JTFG.setText(G.toString());
JTFB.setText(B.toString());
JTFX.setText(X.toString());
JTFY.setText(Y.toString());
//System.out.println(pixel);
s16="#"+Integer.toHexString(R)+Integer.toHexString(G)+Integer.toHexString(B);//得到颜色的十六进制表示。
JTF16.setText(s16);
Color col=new Color(R,G,B);
JCol.setForeground(col);//对当前选中的颜色进行显示。
}catch(AWTException ex)
{
ex.printStackTrace();
}
}
}
public void keyTyped(KeyEvent e)
{ }
public void keyPressed(KeyEvent e) 
{
}
}class CT
{
public static void main(String[] args)
{
ColorTest ct = new ColorTest();
ct.setMenuBar();
ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ct.setSize(300,200);
ct.setLocation(200,200);
ct.ColorTest();
ct.setVisible(true);
}
}