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:将鼠标光标下当前像素的颜色打印到控制台:鼠标侦听器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在VC++ Win32应用程序中鼠标光标位置打印句子?

不移动鼠标光标时Java动画口吃

css怎么设置鼠标手势

鼠标按下时CSS光标更改不起作用

如何引导鼠标滚轮输入在光标下控制而不是聚焦?

d3.js - 当鼠标悬停在 SVG 容器上的这些元素上时,如何将光标设置为手?