日期:2014-05-20  浏览次数:20612 次

想做一个取色器,但是不知道如何监听java组件外的鼠标操作
我想做成鼠标点击取色,但是不知道怎么监听java组件外的鼠标操作,就写成了这样,求帮助

import java.awt.Color;
import java.awt.Font;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 * 取色器
 * 
 * @author Administrator
 * 
 */
public class GetColor extends JFrame {

/**
 * 显示当前颜色
 */
JLabel jLabel = new JLabel("吕");
/**
 * 显示颜色的RGB值
 */
JTextField textField = new JTextField();

/**
 * 统计停留的次数,默认为-1
 */
int count = -1;
/**
 * 判断是否执行循环体里的内容
 */
boolean bool = true;

JButton jButton1 = new JButton("使用帮助");
JButton jButton = new JButton("开始取色");

public GetColor() {

this.setBounds(300, 300, 200, 154);

jLabel.setFont(new Font("黑体",Font.BOLD,72));
jLabel.setBounds(20, 35, 80, 60);
textField.setBounds(100, 35, 80, 60);
jButton1.setBounds(20, 5, 160, 25);
this.add(jButton1);
jButton.setBounds(20, 100, 160, 25);
this.add(jButton);

jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
count = -1;
bool = true;
}
});

jButton1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(getParent(),
"将鼠标悬浮在你要取色的目标上1秒左右即可自动取色!", "帮助提示",
JOptionPane.INFORMATION_MESSAGE);
}
});
this.add(jLabel);
this.add(textField);

this.setResizable(false);
this.setLayout(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ColorGet colorGet = new ColorGet();
Thread thread = new Thread(colorGet);
thread.start();
}

// 将RGB颜色数值转换成16进制字符串
public String changeColor(int number) {
StringBuffer sb = new StringBuffer(Integer.toHexString(number & 0xff));
while (sb.length() < 2) {
sb.append("0");
}
return sb.toString();
}

class ColorGet implements Runnable {

int location = -100;

@Override
public void run() {
while (true) {
if (bool) {
//获得鼠标当前具体的某一点
PointerInfo pointerInfo = MouseInfo.getPointerInfo();
//获得点的坐标信息
Point point = pointerInfo.getLocation();
int x = point.x;
int y = point.y;
try {
Robot robot =new Robot();
//得到指定坐标的颜色
Color color = robot.getPixelColor(x, y);