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

时间:2015-04-14 01:37:28

标签: java swing awt mouselistener

我有一个更普遍的问题要问。 当我必须在我的类中实现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

        }

    };

通常,我只需要其中的一两个。有没有办法实现我需要的那个,还是我必须处理浪费的代码行? 感谢您的时间。 最好,

Dauta

1 个答案:

答案 0 :(得分:3)

使用MouseAdapter,它是实现MouseListener(以及MosueWheelListenerMouseMotionListener)接口的基本类,但提供了所有方法的空白实现,这意味着你可以覆盖你想要的那些......

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();

    }
 }

如果你仔细研究一下这些文档,你会发现还有更多这样的类;)

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