我试图建立一个检测的颜色,是鼠标光标下一个程序,然后显示在屏幕上的窗口颜色和RGB值。 我很新到Java所以不知道任何东西。 我有两个代码我从一个朋友在工作与帮助下,第一个获得一个缓冲的图像的特定的RGB值的坐标,以及其他需要的用户定义的RGB值,并显示一个窗格,在它的颜色。 我的问题是“我怎么让程序检测到鼠标光标下的颜色,不管它是什么滚动了吗?
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);
}
}
作为@Hovercraft指出。
通过查看启动Robot#getPixelColor
。
你需要知道鼠标光标,而没有“简单”的方法来跟踪光标,你可以得到它的使用当前位置MouseInfo#getPointerInfo
以实例已更新
这是概念的小例子。 这部作品基于鼠标光标的moition。 一个可能的增强将是也通知监控监听器当光标下的颜色变化,以及...
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(p.x, p.y);
setBackground(pixelColor);
label.setText(p.x + "x" + p.y + " = " + 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());
}
}
}
}
}
}