黑马程序员技术交流社区

标题: 鼠标监听器,如果想实现单击和双击效果分开,该怎么做? [打印本页]

作者: 紫^瞳    时间: 2014-4-4 21:06
标题: 鼠标监听器,如果想实现单击和双击效果分开,该怎么做?
代码运行后,双击鼠标,打印“双击”的同时也会打印“单击”,如何使两者效果分开呢?
就是说:如何实现 当单击鼠标的时候,只出现“单击”,当双击鼠标的时候,只出现“双击”。
  1. package cn.ittest;

  2. import java.awt.*;
  3. import java.awt.event.*;

  4. public class GUIDemo {
  5.         private static final int WIDTH = Toolkit.getDefaultToolkit()
  6.                         .getScreenSize().width;
  7.         private static final int HEIGHT = Toolkit.getDefaultToolkit()
  8.                         .getScreenSize().height;

  9.         public static void main(String[] args) {
  10.                 Frame f = new Frame("hello world");
  11.                 f.setBounds((WIDTH - 400) / 2, (HEIGHT - 300) / 2, 400, 300);
  12.                 f.setBackground(Color.gray);
  13.                 f.setLayout(null);
  14.                 f.setVisible(true);

  15.                 // 添加按钮
  16.                 Button but = new Button("确定");
  17.                 but.setBounds(200, 150, 80, 40);
  18.                 but.setFont(new Font("楷体", 1, 12));
  19.                 f.add(but);


  20.                 // 添加鼠标监听器

  21.                 but.addMouseListener(new MouseAdapter() {
  22.                         public void mouseClicked(MouseEvent e) {
  23.                                 int count = e.getClickCount();
  24. [color=Red]                                if (count == 2) {
  25.                                         System.out.println("双击");
  26.                                 } else if(count == 1)
  27.                                         System.out.println("单击");[/color]
  28.                         }
  29.                 });
  30.         }
  31. }
复制代码

作者: 林发明    时间: 2014-4-4 21:20
可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.   
作者: zzmxhm    时间: 2014-4-4 23:45
同 ls 的思路,可以参考一下这段代码:
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.EventQueue;
  4. import java.awt.Toolkit;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.MouseAdapter;
  8. import java.awt.event.MouseEvent;

  9. import javax.swing.JFrame;
  10. import javax.swing.JLabel;
  11. import javax.swing.JPanel;
  12. import javax.swing.Timer;

  13. public class DoubleClickTest {
  14.         public static void main(String[] args) {
  15.                 EventQueue.invokeLater(new Runnable() {
  16.                         public void run() {
  17.                                 JFrame frame = new DoubleClickFrame();
  18.                                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19.                                 frame.setVisible(true);
  20.                         }
  21.                 });
  22.         }
  23. }

  24. class DoubleClickFrame extends JFrame {
  25.         public static final int DEFAULT_WIDTH = 300;
  26.         public static final int DEFAULT_HEIGHT = 200;
  27.        
  28.         private JLabel label;
  29.        
  30.         public DoubleClickFrame() {
  31.                 setTitle("oops");
  32.                 setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  33.                
  34.                 JPanel panel = new JPanel();
  35.                 panel.setBackground(new Color(0xAA, 0xAA, 0xAA));
  36.                 panel.addMouseListener(new MouseAdapter() {
  37.                         private volatile boolean isDoubleClick = false;
  38.                         private final int timerInterval = (int) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
  39.                        
  40.                         public void mouseClicked(MouseEvent event) {
  41.                                 if (event.getClickCount() == 2) {
  42.                                         label.setText("double click!");
  43.                                         isDoubleClick = true;
  44.                                 } else {
  45.                                         Timer timer = new Timer(timerInterval, new ActionListener() {
  46.                                                 public void actionPerformed(ActionEvent e) {
  47.                                                         if (isDoubleClick) {
  48.                                                                 isDoubleClick = false;
  49.                                                         } else {
  50.                                                                 label.setText("single click!");
  51.                                                         }
  52.                                                 }
  53.                                         });
  54.                                        
  55.                                         timer.setRepeats(false);
  56.                                         timer.start();
  57.                                 }
  58.                         }
  59.                 });
  60.                
  61.                 add(panel);
  62.                
  63.                 label = new JLabel("nothing");
  64.                 add(label, BorderLayout.SOUTH);
  65.         }
  66. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2