mouselistener方法接口中的mouseclicked()方法和mousepressed()方法有什么区别?
这是一个热门的话题,让我们来深入的找寻答案,java’s awt库提供了两个接口来监听和接收鼠标事件。一个是java.awt.event.mouselistener:
public interface mouselistener extends eventlistener
{
public void mousepressed(mouseevent e);
public void mousereleased(mouseevent e);
public void mouseclicked(mouseevent e);
public void mouseentered(mouseevent e);
public void mouseexited(mouseevent e);
}
|
另一个是 java.awt.event.mousemotionlistener:
public interface mousemotionlistener extends eventlistener
{
public void mousedragged(mouseevent e);
public void mousemoved(mouseevent e);
}
|
swing 提供了 mouseinputlistener,这个接口的同时扩展了mousemotionlistener和mouselistener 接口。
让我们来看看这些接口中的方法:
◆mousepressed() 当用户按下鼠标按钮时发生。
◆mousereleased() 当用户松开鼠标按钮时发生。
◆mouseclicked() 当用户按下并松开鼠标按钮时发生。用户在选择或双击图标的时候通常会点击鼠标按钮。 用户如果在松开鼠标之前移动鼠标,点击不会导致鼠标相应事件出现。
◆因为点击鼠标是按下鼠标和松开鼠标的结合,在事件分配给 mouseclicked() 方法之前,mousepressed() 和 mousereleased() 方法已同时被调用。
◆mouseentered() 当鼠标离开当前组件并进入你所监听的组件时激活事件。
◆mouseexited() 当鼠标离开你所监听的组件时发生。
◆mousedragged() 当用户按下鼠标按钮并在松开之前进行移动时发生。在mousedragged() 后松开鼠标不会导致mouseclicked()。
◆mousemoved() 当鼠标在组件上移动而 不时拖动时发生。
要监听鼠标事件就必须调用这些接口之一,或扩展一个鼠标适配器(mouse adapters) 类。awt 提供了两种监听适配器(listener adapters): java.awt.event.mouseadapter 和java.awt.event.mousemotionadapter。
swing 为mouseinputlistener提供了一个叫做javax.swing.event.mouseinputadapter的适配器。有了适配器你就不必调用接口中每个方法了。 取而代之,你只需简单的扩展适配器并重写你要监听的方法就可以了。
如果你还是很迷惑,再看看api 并写个小测试程序。 有时尝试理解不同事件的最好方法different events。我写了一个小小的应用程序来表现两种鼠标事件的区别。这里是完整的代码:
import java.awt.*;
import java.awt.event.*;
public class mousetest extends frame
{
public mousetest()
{
button b = new button("javaworld javaq&a");
b.addactionlistener( new actionlistener() {
public void actionperformed(actionevent e)
{
system.exit(0);
}
}
);
add(b,borderlayout.north);
addmouselistener(new mousetest.mousehandler());
addmousemotionlistener(new mousetest.mousemotionhandler());
}
// mousehandler is an inner class that implements the mouselistener.
// each method simply prints out a message to the command line.
private class mousehandler implements mouselistener
{
public void mousepressed(mouseevent e)
{
system.out.println("mouse pressed");
}
public void mouseclicked(mouseevent e)
{
system.out.println("moused clicked");
}
public void mousereleased(mouseevent e)
{
system.out.println("mouse released");
}
public void mouseentered(mouseevent e)
{
system.out.println("mouse entered");
}
public void mouseexited(mouseevent e)
{
system.out.println("mouse exited");
}
}
// mousemotionhandler is an inner class that implements the mousemotionlistener.
// each method simply prints out a message to the command line.
private class mousemotionhandler implements mousemotionlistener
{
public void mousemoved(mouseevent e)
{
system.out.println("mouse moved");
}
public void mousedragged(mouseevent e)
{
system.out.println("mouse dragged");
}
}
public static void main(string[] args)
{
new mousetest().show();
}
}
|
这个应用程序建立了一个窗口和一个按钮。当你移动鼠标并按下按钮时,应用程序就会在命令行打印出文本消息,让你看到鼠标响应和事件间的对应关系。
象上边那样写一个小小的测试程序是对陌生的api 进行试验的好方法。