0

我的代码在这里:

package RGBValues;

import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;

public class RGBValues {

    public static void main(String[] args) throws Exception {
        PointerInfo pointer;
        pointer = MouseInfo.getPointerInfo();
        Point coord = pointer.getLocation();

        Robot robot = new Robot();
        robot.delay(2000);

        while(true) {
            coord = MouseInfo.getPointerInfo().getLocation()…
            Color color = robot.getPixelColor((int)coord.getX(), (int)coord.getY());
            if( color.getGreen() == 255 &&
                color.getBlue() == 255 &&
                color.getRed() == 255
            ) {
                System.out.println("WHITE");
            }
            robot.delay(1000);
        }
    }
}

我一直坚持如何制作它,以便鼠标指向屏幕上的任何位置,它都会向我显示指针下方该像素的 RGB 值。有人可以帮忙吗?我对java很陌生,所以我不知道如何解决这个问题。

4

1 回答 1

1

除了可能让线程有点狂野之外,我看不出你的代码不能工作的任何原因......

在此处输入图像描述

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class WhatsMyColor {

    public static void main(String[] args) {
        new WhatsMyColor();
    }

    public WhatsMyColor() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            Thread thread = new Thread(new BackgroundMonitor());
            thread.setDaemon(true);
            thread.start();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); 
            Color color = getBackground();
            String text = color.getRed() + "x" + color.getGreen() + "x" + color.getBlue();
            FontMetrics fm = g.getFontMetrics();
            int x = (getWidth() - fm.stringWidth(text)) / 2;
            int y = ((getHeight() - fm.getHeight()) / 2) + fm.getAscent();
            g.drawString(text, x, y);
        }

        public class BackgroundMonitor implements Runnable {

            @Override
            public void run() {
                try {
                    Robot robot = new Robot();

                    Color previous = null;
                    while (true) {
                        Point coord = MouseInfo.getPointerInfo().getLocation();
                        Color color = robot.getPixelColor((int) coord.getX(), (int) coord.getY());
                        if (previous == null || !previous.equals(color)) {
                            SwingUtilities.invokeLater(new UpdateBackgroud(color));
                        }
                        try {
                            Thread.sleep(250);
                        } catch (InterruptedException ex) {
                        }
                    }
                } catch (AWTException | HeadlessException exp) {
                    exp.printStackTrace();
                }
            }
        }

        public class UpdateBackgroud implements Runnable {

            private Color color;

            public UpdateBackgroud(Color color) {
                this.color = color;
            }

            @Override
            public void run() {
                setBackground(color);
            }

        }
    }
}
于 2013-04-22T05:20:44.587 回答