JAVA鼠标键盘事件及实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
private Dimension dim; private Random rand; private Robot robot; private volatile boolean stop = false; public MouseController() { dim = Toolkit.getDefaultToolkit().getScreenSize(); rand = new Random(); try { robot = new Robot(); } catch (AWTException ex) { ex.printStackTrace(); } } public void run() { while(!stop) { int x = rand.nextInt(dim.width); int y = rand.nextInt(dim.height); robot.mouseMove(x, y); robot.mousePress(InputEvent.BUTTON1_MASK); try { Thread.sleep(2000); } catch (InterruptedException ex) { ex.printStackTrace(); }
public void windowClosing(WindowEvent e){ System.exit(0); } } ); } /*由 mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/ public void mousePressed(MouseEvent e){ startx=e.getX(); starty=e.getY(); } public void mouseReleased(MouseEvent e){ endx=e.getX(); endy=e.getY(); } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } /*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用 repaint() 方法*/ public void mouseMoved(MouseEvent e){ flag=1; x=e.getX(); y=e.getY();
frame.setVisible(true); } } /// 简要说明 在 MyPanel 的构建器中添加了鼠标适配器来监听鼠标点击数和位置。 也添加了运 动监听器来处理移动和拖放操作。
鼠标双击事件
鼠标的单双击事件在很多时候对我们帮助很大,但是在 JAVA 中却没有给出鼠标双击事件.我 们可以通过事件源 e.getClickCount()==2 来判断鼠标点击次数来实现鼠标双击事件 , 例如 : public class MyMouseListener extends java.awt.event.MouseAdapter ...{ public void mouseClicked(MouseEvent e) ...{ System.out.println("clicked"); int clickTimes = e.getClickCount(); if (clickTimes == 2) ...{ System.out.println("Doublc Clicked!"); } } } 但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所 以我们试图改进以上方案,不使用系统提供的 e.getClickCount()方法.可以考虑当第一次单击 鼠标的时候让鼠标单击事件延时 0.2 秒执行,而在这段时间里等待第二次单击,如果有第二次 单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执 行单击任务. 下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响! public class MyMouseListener extends java.awt.event.MouseAdapter ...{ private static boolean flag=false;//用来判断是否已经执行双击事件 private static int clickNum=0;//用来判断是否该执行双击事件 public void mouseClicked(MouseEvent e) ...{ final MouseEvent me=e;//事件源 this.flag=false;//每次点击鼠标初始化双击事件执行标志为 false
repaint(); } public void mouseDragged(MouseEvent e){ flag=2; x=e.getX(); y=e.getY(); repaint(); } public void update(Graphics g){ g.setColor(this.getBackground()); g.fillRect(0,0,getWidth(),getHeight()); paint(g); } public void paint(Graphics g){ g.setColor(Color.black); if (flag==1){ g.drawString("鼠标坐标:("+x+","+y+";)",10,50); g.drawLine(startx,starty,endx,endy); } if (flag==2){ g.drawString("拖曳鼠标价坐标:("+x+","+y+";)",10,50); g.drawLine(startx,starty,x,y); } }
例 4 本例程演示鼠标监听器,鼠标点击和运动的监听。 /// // MouseEvt.java import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements MouseMotionListener{ public MyPanel() { addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() >= 2) System.out.println("\n 双击鼠标"); int x = evt.getX(); int y = evt.getY(); System.out.println("点击鼠标的位置\nX:" + x + "\ty: " + y); } }); addMouseMotionListener(this); } public void mouseMoved(MouseEvent evt){ System.out.println("\n 鼠标正在移动"); } public void mouseDragged(MouseEvent evt){ System.out.println("\n 鼠标正在拖动"); } } class MyFrame extends JFrame{ public MyFrame(){ setTitle("鼠标事件示例程序"); setSize(300, 200); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); Container contentPane = getContentPane(); contentPane.add(new MyPanel()); } } public class MouseEvt{ public static void main(String[] args){ JFrame frame = new MyFrame();
public static void main(String[] args){ new MouseDemo3(); } }
例3 实现一个简单的鼠标控制程序 MouseController。程序功能很简单:随机移动鼠 标并点击左键。 代码如下: import java.awt.AWTException; import java.awt.Dimension; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.InputEvent; import java.util.Random; /** * */ /** * @Create date 2007-11-6 */ public class MouseController implements Runnable {
鼠标监听器 鼠标监听器 mouseListener 监听鼠标事件 MouseEvent。相应事件和处理方法如 下表: 鼠标事件 MOUSE_CLICKED MOUSE_PRESSED MOUSE_RELEASED MOUSE_ENTERED 域) MOUSE_EXITED 区域) 鼠标事件 MouseEvent 常用方法 int getClickCount() int getX(), int getY() 得到点击次数 1 OR 2; 得到鼠标的(象素)位置。 MouseExited (MouseEvent) 鼠标离开 (某组件 处理方法 MouseClicked (MouseEvent) MousePressed (MouseEvent) MouseReleased(MouseEvent) MouseEntered (MouseEvent) 鼠标点击(单或双) 鼠标按下 鼠标松开 鼠标进入(某组件区
对于鼠标的移动和拖放,另外用鼠标运动监听器 mouseMotionListener。因为许 多程序不需要监听鼠标运动, 把两者分开可简化程序。有两个方法处理鼠标运动 事件: MOUSE_MOVED MOUSE_DRAGGED MouseMoved (MouseEvent) 鼠标在移动 鼠标被拖动
MouseDragged(MouseEvent)
} } public synchronized void stop() { stop = true; } public static void main(String[] args) { MouseController mc = new MouseController(); Thre $False$ ad mcThread = new Thread(mc); System.out.println("Mouse Controller start"); mcThread.start(); try { Thread.sleep(60000); } catch (InterruptedException ex) { ex.printStackTrace(); } mc.stop(); System.out.println("Mouse Controller stoped"); } }
Leabharlann Baidu
下面的例程演示简单的鼠标监听,并在屏幕上输出鼠标操作的信息。 例2 下面是讨论 MouseMotionListener 的使用时机,它提供的下面的两个方法,可让 你随时掌握鼠标的坐标,并处理拖曳鼠标的操作。 MouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e)
---------------------------------------------------------------------下面的范例让你知道鼠标在 JFrame 上的坐标,并拖曳出直线来。 MouseDemo3.java
import java.awt.*; import java.awt.event.*; import javax.swing.*; /*为了达到画线的功能,我们分别 implements MouseListener 与 MouseMotionListener. */ public class MouseDemo3 extends JFrame implements MouseListener,MouseMotionListener{ int flag;//flag=1 代表 Mouse Moved,flag=2 代表 Mouse Dragged int x=0; int y=0; int startx,starty,endx,endy;//起始坐标与终点坐标 public MouseDemo3(){ Container contentPane=getContentPane(); contentPane.addMouseListener(this); contentPane.addMouseMotionListener(this); setSize(300,300); show(); addWindowListener( new WindowAdapter(){