在 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
(以及 MosueWheelListener
和 MouseMotionListener
)接口的基本 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@getXOnScreen
和 MosueEvent@getYOnScreen
或 SwingUtilities#convertPointToScreen(Point, Component)
;)
我有一个更笼统的问题要问。 当我必须在 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
(以及 MosueWheelListener
和 MouseMotionListener
)接口的基本 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@getXOnScreen
和 MosueEvent@getYOnScreen
或 SwingUtilities#convertPointToScreen(Point, Component)
;)