在 Java 中实现 MouseListener 的更简单方法

Easier way to implement MouseListener in Java

我有一个更笼统的问题要问。 当我必须在 class 中实现 MouseListener 时,编译器会自动强制我实现 MouseListener 接口中的每个方法。 像这样:

   MouseListener mouseLtnr = new MouseListener()
    {

        @Override
        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub

            counter++;

            xs.add(MouseInfo.getPointerInfo().getLocation().x - getLocationOnScreen().x);
            ys.add(MouseInfo.getPointerInfo().getLocation().y - getLocationOnScreen().y);

            System.out.println(xs.get(counter-1) + " , " + ys.get(counter-1));

            if(flag == false)
            repaint();

        }

        @Override
        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

    };

通常情况下,我只需要其中的一两个。有没有一种方法可以只实现我需要的那个,或者我是否必须处理浪费的代码行? 感谢您的时间。 最好的,

道塔

使用 MouseAdapter,它是实现 MouseListener(以及 MosueWheelListenerMouseMotionListener)接口的基本 class,但提供空白实现在所有方法中,这意味着您可以只覆盖您想要的方法...

MouseListener mouseLtnr = new MouseAdapter()
{

    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub

        counter++;

        xs.add(MouseInfo.getPointerInfo().getLocation().x - getLocationOnScreen().x);
        ys.add(MouseInfo.getPointerInfo().getLocation().y - getLocationOnScreen().y);

        System.out.println(xs.get(counter-1) + " , " + ys.get(counter-1));

        if(flag == false)
        repaint();

    }
 }

如果你仔细研究文档,你会发现更多 class 这样的文档 ;)

仅供参考:MouseInfo.getPointerInfo() 将 return 鼠标光标位置相对于屏幕,而不是生成事件的组件。您还可以根据需要使用 MouseEvent@getXOnScreenMosueEvent@getYOnScreenSwingUtilities#convertPointToScreen(Point, Component) ;)