在java中鼠标双击事件可以通过java.awt.event.MouseEvent事件类下的getClickCount()方法来获取鼠标单击的次数。通过这个方法可以实现鼠标的双击事件。
- import java.awt.event.*;
- import javax.swing.*;
- public class MouseClickTest extends JFrame {
- public MouseClickTest(){
- super("鼠标双击事件练习");
- init();
- setVisible(true);
- setSize(800,500);
- }
- public void init(){
- JButton button = new JButton("双击演示按钮");
- button.addMouseListener(new MouseAdapter(){
- int n = 0;//记录鼠标敲击次数
- public void mouseClicked(MouseEvent e){
- n = e.getClickCount();
- if(n == 2){
- System.out.println("鼠标双击了!");
- }
- if(n == 1){
- System.out.println("鼠标单击事件!");
- }
- }
- });
- add(button);
- }
- public static void main(String[] args){
- new MouseClickTest();
- }
- }
鼠标双击实现了。从上面程序可以看出,如果鼠标单击事件和双击事件并存的时候,单击事件也执行了。这就出现问题了。如果只想要双击事件怎么办?有一种方法是:鼠标单击一次后延迟0.5。在这0.5秒内如果有单击就判定为双击,执行双击操作,取消单击操作。如果没有就执行单击操作。
代码如下:
- import javax.swing.*;
- import java.awt.event.*;
- public class MouseTwoClickTest extends JFrame{
- public MouseTwoClickTest(){
- super("鼠标双击事件演示");
- init();
- setSize(800,700);
- setVisible(true);
- }
- public void init(){
- JButton button = new JButton("双击按钮");
- button.addMouseListener(new MyMouseListener());
- button.setBounds(100,100,200,100);
- this.getContentPane().setLayout(null);
- this.getContentPane().add(button);
- }
- public static void main(String[] args){
- new MouseTwoClickTest();
- }
- }
- class MyMouseListener extends MouseAdapter{
- public boolean clickFlag ;//记录是否已经执行过鼠标双击事件
- public int clickNum = 0; //判断是否执行双击事件
- public void mouseClicked(MouseEvent e){
- this.clickFlag = false;
- if(clickNum == 1){//如果鼠标在规定的时间内已经被单击过一次,则说明这次是双击了,执行双击事件
- System.out.println("执行鼠标双击事件!");
- clickFlag = true;
- clickNum = 0;
- return;
- }
- java.util.Timer timer = new java.util.Timer();//定义一个定时器
- timer.schedule(new java.util.TimerTask(){
- int n = 0;//记录定时器执行的次数
- @Override
- public void run() {
- // TODO Auto-generated method stub
- if(clickFlag){//如果双击事件已经执行完毕,取消单击事件
- clickNum = 0;
- n = 0;
- this.cancel();
- return;
- }
- if(n == 1){//如果规定的时间内未执行鼠标双击事件则执行鼠标单击事件
- System.out.println("执行鼠标单击事件");
- clickFlag = true;
- clickNum = 0;
- n = 0;
- this.cancel();
- return;
- }
- n++;
- clickNum++;
- }}, new java.util.Date(), 500);
- }
- }