首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Java 實現螢幕取色器:Robot + MouseInfo 兩種模式完整範例

     編輯:更多程式設計知識

核心 API

  • java.awt.Robot:產生原生系統輸入事件、擷取螢幕像素 getPixelColor(x, y)。
  • java.awt.MouseInfo.getPointerInfo().getLocation():取得滑鼠全螢幕座標 (含多螢幕)。
  • java.awt.Color:封裝 RGB、HSB、Alpha,提供 getRed()/getGreen()/getBlue()。

模式一:主控台單次取色

public class PickColor {
    public static void main(String[] args) {
        new PickColor().pickColor();
    }
    public Color pickColor() {
        try {
            Robot robot = new Robot();
            Point p = MouseInfo.getPointerInfo().getLocation();
            Color pixel = robot.getPixelColor(p.x, p.y);
            System.out.println("Color = " + pixel); // java.awt.Color[r=255,g=128,b=0]
            return pixel;
        } catch (AWTException e) {
            e.printStackTrace();
            System.exit(1);
            return null;
        }
    }
}

模式二:GUI 即時追蹤顯示

結合 MouseMotionListener (僅限 Java 視窗內) 與獨立執行緒輪詢 Robot.getPixelColor (全螢幕生效),即時更新面板背景色與文字顏色對比。

public class PickColor2 extends JFrame {
    public PickColor2() {
        super("Pick Color");
        setSize(200, 200);
        JPanel panel = new JPanel();
        add(panel);
        
        // 滑鼠移動監聽 (僅面板內)
        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);
    }
    // pickColor() 同模式一
    public static void main(String[] args) { new PickColor2(); }
}

關鍵實作細節

  1. Robot 建立失敗處理:無權限或無顯示裝置時拋 AWTException,需捕獲並友善退出。
  2. 多螢幕座標:MouseInfo 回傳虛擬螢幕座標,Robot.getPixelColor 同樣使用虛擬座標,自動跨螢幕。
  3. 效能考量:輪詢間隔 10~50ms 即可;高頻呼叫 getPixelColor 可能觸發系統級鎖定,導致 UI 卡頓。
  4. 安全性限制:未簽名 Applet/JNLP 無法建立 Robot,需本地應用程式或簽名部署。

擴展應用

  • 調色盤工具:記錄歷史顏色、匯出 CSS/HEX/RGB 字串。
  • 自動化測試:驗證 UI 元素顏色是否符合設計規範。
  • 螢幕錄製/擷取:搭配 Robot.createScreenCapture 實現截圖功能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved