我想做成鼠标点击取色,但是不知道怎么监听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);
//获取RGB值
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
//转换成16进制字符串形式
String htmlColor = "#" + changeColor(r)
+ changeColor(g) + changeColor(b);
//判断是否在原点停留
if (location == x + y) {
count++;
if (count >= 10) {
//保存16进制颜色代码到剪贴板
Clipboard clipboard = Toolkit
.getDefaultToolkit()
.getSystemClipboard();
Transferable transferable = new StringSelection(
htmlColor);
clipboard.setContents(transferable, null);
//给出提示信息
JOptionPane.showMessageDialog(getParent(),
"取色成功!颜色代码已复制到剪贴板!", "信息提示",
JOptionPane.INFORMATION_MESSAGE);
bool = false;
}
}
location = x + y;
textField.setText(htmlColor);
jLabel.setForeground(color);
Thread.sleep(100);
} catch (Exception e) {
}
}
}
} } public static void main(String[] args) {
new GetColor();
}
}