Obtener valor RGB de debajo del cursor del mouse

Intento crear un progtwig que detecte el color que está debajo del cursor del mouse y luego muestre los valores de color y RGB en una ventana de la pantalla. Soy MUY nuevo en Java, así que no sé mucho de nada. Tengo dos códigos en los que he trabajado, con la ayuda de un amigo. El primero obtiene los valores RGB de una coordenada específica de una imagen almacenada, y el otro toma los valores RGB definidos por el usuario y muestra un panel con el color. Mi pregunta es “¿cómo hago para que el progtwig detecte el color debajo del cursor del mouse sin importar lo que se está desplazando?

public class Buffered_Image { public static void main(String[] args) throws IOException { BufferedImage bi = ImageIO.read(new File("C:/Users/user/Pictures/Hornet.jpg")); Color c = new Color(bi.getRGB(50,40)); int red=c.getRed(); int green=c.getGreen(); int blue=c.getBlue(); System.out.print("Red " + red + " Green " + green+ " Blue" + blue + "\n" ); } } public class RGB_Pane { public static void main(String[] args) { JFrame F = new JFrame("RGB"); Panel Pan = new Panel(); F.getContentPane().add(Pan); F.pack(); F.setVisible(true); F.setSize(300, 300); } } class Panel extends JPanel { public Panel() { setPreferredSize(new Dimension(200,200)); int Red = Integer.parseInt(JOptionPane.showInputDialog("Enter value for RED")); int Green = Integer.parseInt(JOptionPane.showInputDialog("Enter value for Green")); int Blue = Integer.parseInt(JOptionPane.showInputDialog("Enter value for BLUE")); Color Defined_Color = new Color(Red,Green,Blue); setBackground(Defined_Color); } } 

Como @Hovercraft ha señalado.

Comience mirando Robot#getPixelColor .

Tendrá que saber dónde está el cursor del mouse, mientras que no hay una manera “fácil” de seguir el cursor, puede obtener su ubicación actual usando MouseInfo#getPointerInfo

ACTUALIZADO con el ejemplo

Este es un pequeño ejemplo del concepto. Esto funciona según la moción del cursor del mouse. Una posible mejora sería también notificar al oyente del monitor cuando el color también cambie bajo el cursor …

 public class WhatsMyColor { public static void main(String[] args) throws IOException { new WhatsMyColor(); } public WhatsMyColor() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { } catch (InstantiationException ex) { } catch (IllegalAccessException ex) { } catch (UnsupportedLookAndFeelException ex) { } try { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new MouseColorPane()); frame.setSize(400, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception exp) { exp.printStackTrace(); } } }); } public class MouseColorPane extends JPanel implements MouseMonitorListener { private Robot robot; private JLabel label; public MouseColorPane() throws AWTException { label = new JLabel(); setLayout(new GridBagLayout()); add(label); robot = new Robot(); PointerInfo pi = MouseInfo.getPointerInfo(); updateColor(pi.getLocation()); MouseMonitor monitor = new MouseMonitor(); monitor.setMouseMonitorListener(this); monitor.start(); } protected void updateColor(Point p) { Color pixelColor = robot.getPixelColor(px, py); setBackground(pixelColor); label.setText(px + "x" + py + " = " + pixelColor); } @Override public void mousePositionChanged(final Point p) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { updateColor(p); } }); } } public interface MouseMonitorListener { public void mousePositionChanged(Point p); } public static class MouseMonitor extends Thread { private Point lastPoint; private MouseMonitorListener listener; public MouseMonitor() { setDaemon(true); setPriority(MIN_PRIORITY); } public void setMouseMonitorListener(MouseMonitorListener listener) { this.listener = listener; } public MouseMonitorListener getMouseMonitorListener() { return listener; } protected Point getMouseCursorPoint() { PointerInfo pi = MouseInfo.getPointerInfo(); return pi.getLocation(); } @Override public void run() { lastPoint = getMouseCursorPoint(); while (true) { try { sleep(250); } catch (InterruptedException ex) { } Point currentPoint = getMouseCursorPoint(); if (!currentPoint.equals(lastPoint)) { lastPoint = currentPoint; MouseMonitorListener listener = getMouseMonitorListener(); if (listener != null) { listener.mousePositionChanged((Point) lastPoint.clone()); } } } } } }