黑马程序员技术交流社区
标题:
鼠标监听器,如果想实现单击和双击效果分开,该怎么做?
[打印本页]
作者:
紫^瞳
时间:
2014-4-4 21:06
标题:
鼠标监听器,如果想实现单击和双击效果分开,该怎么做?
代码运行后,双击鼠标,打印“双击”的同时也会打印“单击”,如何使两者效果分开呢?
就是说:如何实现 当单击鼠标的时候,只出现“单击”,当双击鼠标的时候,只出现“双击”。
package cn.ittest;
import java.awt.*;
import java.awt.event.*;
public class GUIDemo {
private static final int WIDTH = Toolkit.getDefaultToolkit()
.getScreenSize().width;
private static final int HEIGHT = Toolkit.getDefaultToolkit()
.getScreenSize().height;
public static void main(String[] args) {
Frame f = new Frame("hello world");
f.setBounds((WIDTH - 400) / 2, (HEIGHT - 300) / 2, 400, 300);
f.setBackground(Color.gray);
f.setLayout(null);
f.setVisible(true);
// 添加按钮
Button but = new Button("确定");
but.setBounds(200, 150, 80, 40);
but.setFont(new Font("楷体", 1, 12));
f.add(but);
// 添加鼠标监听器
but.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int count = e.getClickCount();
[color=Red] if (count == 2) {
System.out.println("双击");
} else if(count == 1)
System.out.println("单击");[/color]
}
});
}
}
复制代码
作者:
林发明
时间:
2014-4-4 21:20
可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务.
作者:
zzmxhm
时间:
2014-4-4 23:45
同 ls 的思路,可以参考一下这段代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class DoubleClickTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new DoubleClickFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class DoubleClickFrame extends JFrame {
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
private JLabel label;
public DoubleClickFrame() {
setTitle("oops");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JPanel panel = new JPanel();
panel.setBackground(new Color(0xAA, 0xAA, 0xAA));
panel.addMouseListener(new MouseAdapter() {
private volatile boolean isDoubleClick = false;
private final int timerInterval = (int) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
public void mouseClicked(MouseEvent event) {
if (event.getClickCount() == 2) {
label.setText("double click!");
isDoubleClick = true;
} else {
Timer timer = new Timer(timerInterval, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (isDoubleClick) {
isDoubleClick = false;
} else {
label.setText("single click!");
}
}
});
timer.setRepeats(false);
timer.start();
}
}
});
add(panel);
label = new JLabel("nothing");
add(label, BorderLayout.SOUTH);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2