利用 java.awt.Robot 與 MouseInfo 即可即時擷取滑鼠指標下的螢幕像素顏色。本文提供兩個完整範例:主控台輸出版與 Swing GUI 即時顯示版(含背景色同步與十六進位顏色碼顯示)。
import java.awt.*;
public class PickColor {
public static void main(String[] args) {
PickColor pc = new PickColor();
Color color = pc.pickColor();
System.out.println("color = " + color);
}
public Color pickColor() {
try {
Robot robot = new Robot();
Point pt = MouseInfo.getPointerInfo().getLocation();
return robot.getPixelColor(pt.x, pt.y);
} catch (AWTException e) {
e.printStackTrace();
System.exit(1);
return null;
}
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PickColor2 extends JFrame {
public static void main(String[] args) { new PickColor2(); }
public PickColor2() {
super("Pick Color");
setSize(200, 200);
JPanel panel = new JPanel();
getContentPane().add(panel);
// 滑鼠移動監聽(僅限 Java 視窗內)
panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
panel.setBackground(pickColor());
}
});
// 獨立執行緒:全螢幕輪詢(含螢幕座標)
new Thread(() -> {
while (true) {
try { Thread.sleep(10); } catch (InterruptedException ignored) {}
Color c = pickColor();
panel.setBackground(c);
Graphics g = panel.getGraphics();
if (g != null) {
g.setColor((c.getRed() <= 50 || c.getGreen() <= 50 || c.getBlue() <= 50) ? Color.WHITE : Color.BLACK);
g.drawString(c.toString(), 0, 100);
}
}
}).start();
setVisible(true);
}
private Color pickColor() {
try {
Robot robot = new Robot();
Point pt = MouseInfo.getPointerInfo().getLocation();
return robot.getPixelColor(pt.x, pt.y);
} catch (AWTException e) {
e.printStackTrace();
System.exit(1);
return Color.BLACK;
}
}
}
| 類別/方法 | 用途 |
|---|---|
| Robot.getPixelColor(x, y) | 擷取螢幕指定座標像素顏色 |
| MouseInfo.getPointerInfo().getLocation() | 取得滑鼠指標螢幕絕對座標 |
| Color.getRed()/getGreen()/getBlue() | 取得 RGB 分量 (0-255) |
注意: 需 JVM 支援 Robot(Headless 環境不可用),且需適當權限存取螢幕像素。