免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3852 | 回复: 2
打印 上一主题 下一主题

请教鼠标点击事件的次数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-01 21:32 |只看该作者 |倒序浏览
本帖最后由 moonight 于 2011-03-01 21:37 编辑

写了一个Applet的程序。监听到鼠标点击事件后向控制台输出一行字符串。
我理解每次点击事件都应该只调用一次mousePressed()方法。
但是通过看控制台的输出发现是调用了很多次。也就是每次鼠标点击控制台都有很多行输出。

这是为什么呢?如何能只调用一次mousePressed()方法呢?
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.applet.*;

  4. public class MouseOperationsByEvent extends Applet
  5. {
  6.         public void paint(Graphics g)
  7.         {
  8.                 MouseListener mdListener = new MouseAdapter(){
  9.                         //处理鼠标点击事件
  10.                         public void mousePressed(MouseEvent e) {
  11.                                 System.out.println("------");
  12.                                 repaint();
  13.                         }
  14.                 };
  15.                        
  16.                 addMouseListener(mdListener);
  17.   }
  18. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-03-02 10:10 |只看该作者
回复 1# moonight


    注释掉repaint();方法即可

这个相当于把以前的重新做了一次,所以你第一次点击就打印一行,

第2次点击就打印2行,后续递增啊

论坛徽章:
0
3 [报告]
发表于 2011-03-03 11:33 |只看该作者
问题已经解决。不是repaint的问题。
主要是不应该在paint方法里面注册监听器。paint方法是反复执行的。每执行一次就注册一个监听器,所以出问题了。

正解如下:
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.applet.*;

  4. public class MouseOperationsByEvent extends Applet
  5. {
  6.     public void init() {
  7.     MouseListener mdListener = new MouseAdapter(){
  8.             //处理鼠标点击事件
  9.             public void mousePressed(MouseEvent e) {
  10.                 System.out.println("------");
  11.                 repaint();
  12.             }
  13.         };
  14.         
  15.         MouseMotionListener mmListener = new MouseMotionAdapter() {
  16.             // 鼠标移动事件
  17.             public void mouseMoved(MouseEvent e) {
  18.                 System.out.println("====");
  19.                 repaint();
  20.             }
  21.         };
  22.         
  23.         addMouseListener(mdListener);
  24.         addMouseMotionListener(mmListener);
  25.   }

  26.     public void paint(Graphics g)
  27.     {
  28.         
  29.   }
  30. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP