Java:将鼠标光标下当前像素的颜色打印到控制台:鼠标侦听器不起作用
Posted
技术标签:
【中文标题】Java:将鼠标光标下当前像素的颜色打印到控制台:鼠标侦听器不起作用【英文标题】:Java: printing the color of the current pixel under mouse cursor to console: mouse listener doesn't work 【发布时间】:2020-09-04 04:54:38 【问题描述】:我正在尝试在鼠标移动事件中打印当前像素的颜色。我有这个代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class PixelWizard extends JFrame
public PixelWizard()
addMouseMotionListener(new MouseListenerImpl());
setVisible(true);
public static void main(String[] args)
PixelWizard pixelWizard = new PixelWizard();
class MouseListenerImpl implements MouseMotionListener
@Override
public void mouseMoved(MouseEvent e)
System.out.println("moved event");
mouseDragged(e);
@Override
public void mouseDragged(MouseEvent e)
try
Robot robot = new Robot();
robot.delay(2000);
Point coord = MouseInfo.getPointerInfo().getLocation();
Color color = robot.getPixelColor((int) coord.getX(), (int) coord.getX());
String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
System.out.println(hex);
catch (Exception ex)
ex.printStackTrace();
但它什么也没做。
【问题讨论】:
我没有看到您将侦听器附加到某些东西上,您希望它如何工作? @Stultuske 我应该把它加到什么地方?我希望它对鼠标在整个屏幕上的移动做出反应 - 在任何窗口中,而不仅仅是在单个Frame
/JPanel
那么 Java 可能不是您想要使用的语言
@Stultuske 为什么?
因为必须将侦听器添加到组件中,并且仅限于此。 Java 就是这样。
【参考方案1】:
无论何时调用mouseMoved
,都无需调用mouseDragged
:
class MouseListenerImpl implements MouseMotionListener
private Robot robot;
MouseListenerImpl()
try
robot = new Robot(); //construct a robot once
catch (AWTException ex)
ex.printStackTrace();
@Override
public void mouseMoved(MouseEvent e)
printColor(e);
@Override
public void mouseDragged(MouseEvent e)
printColor(e);
private void printColor(MouseEvent e)
Color color = robot.getPixelColor(e.getX(), e.getY());
String hex = String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
System.out.println(hex);
【讨论】:
我们将不胜感激以上是关于Java:将鼠标光标下当前像素的颜色打印到控制台:鼠标侦听器不起作用的主要内容,如果未能解决你的问题,请参考以下文章