Java提供了处理鼠标事件的两个监听器接口: MouseListener 和 MouseMotionListener。
1)MouseListener 接口监听鼠标的按下、松开、进入、退出和点击等行为;
2)MouseMotionListener 接口监听鼠标的移动和拖动等行为;
当鼠标进入或离开组件时调用mouseEntered(MouseEvent e)和mouseExit(MouseEvent e)事件处理器。
当鼠标按下或松开时调用mousePressed(MouseEvent e)和mouseReleased(MouseEvent e)事件处理器。而当按下鼠标并松开后,调用mouseClicked(MouseEvent e)事件处理器。
当不按按钮移动鼠标时调用mouseMoved(MouseEvent e)事件处理器,当按下按钮移动鼠标时调用mouseDragged(MouseEvent e)事件处理器。
例:下面实现在面板上按住鼠标左键移动鼠标,就可以绘画,按住右键移动,就可以擦去所画的东西。
实现效果如图:
demo2为移动右键实现“画图”的效果
demo1为移动左键实现“擦拭”的效果
package Ranr;
import java.awt.;
import javax.swing.;
import java.awt.event.*;
public class ScribbleDemo extends JFrame implements MouseListener, MouseMotionListener
{
Point lineStart=new Point(0,0);
ScribbleDemo(){
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
lineStart.move(e.getX(),e.getY());
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
Graphics g=getGraphics();
if (e.isMetaDown()) // 检测鼠标右键单击
{
g.setColor(Color.black);
g.drawLine(lineStart.x, lineStart.y,e.getX(), e.getY());
lineStart.move(e.getX(), e.getY());
}
else // 检测鼠标左键单击
{
g.setColor(getBackground());
g.fillOval(e.getX() - (20/2),e.getY() - (20/2), 20, 20);
}
g.dispose();
}
public void mouseMoved(MouseEvent e)
{
}
public static void main(String[] args)
{
ScribbleDemo f=new ScribbleDemo();
f.setSize(300,300);
f.setVisible(true);
}}
//2017.6.16 今天最喜欢的一道练习题