我正在尝试在鼠标移动事件时打印当前像素的颜色。我有此代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class PixelWizard extends JFrame {
public PixelWizard() {
addMouseMotionListener(new MouseListenerImpl());
setVisible(true);
}
public static void main(String[] args) {
PixelWizard pixelWizard = new PixelWizard();
}
}
class MouseListenerImpl implements MouseMotionListener {
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("moved event");
mouseDragged(e);
}
@Override
public void mouseDragged(MouseEvent e) {
try {
Robot robot = new Robot();
robot.delay(2000);
Point coord = MouseInfo.getPointerInfo().getLocation();
Color color = robot.getPixelColor((int) coord.getX(), (int) coord.getX());
String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
System.out.println(hex);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
但是它什么也没做。
[每次调用mouseDragged
时都不需要调用mouseMoved
:
class MouseListenerImpl implements MouseMotionListener {
private Robot robot;
MouseListenerImpl() {
try {
robot = new Robot(); //construct a robot once
} catch (AWTException ex) {
ex.printStackTrace();
}
}
@Override
public void mouseMoved(MouseEvent e) {
printColor(e);
}
@Override
public void mouseDragged(MouseEvent e) {
printColor(e);
}
private void printColor(MouseEvent e) {
Color color = robot.getPixelColor(e.getX(), e.getY());
String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
System.out.println(hex);
}
}