我有一个更普遍的问题要问。 当我必须在我的类中实现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
答案 0 :(得分:3)
使用MouseAdapter
,它是实现MouseListener
(以及MosueWheelListener
和MouseMotionListener
)接口的基本类,但提供了所有方法的空白实现,这意味着你可以覆盖你想要的那些......
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@getXOnScreen
和MosueEvent@getYOnScreen
或SwingUtilities#convertPointToScreen(Point, Component)
;)