JTable中的MOUSE雙擊事件
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
JTable中的MOUSE雙擊事件
MOUSE的雙擊事件,有時候是很有用的,如彈出處理對話框等,可是在JAVA中SUN公司沒有為我們准備這一特殊的事件,所以當我們在遇見的時候就不得不自己處理了。下面,筆都就將自己對這一過程的摸索詳細的道來,希望您能夠
遇見這樣的問題后不會頭痛。
如果是按鈕或者是文件框等的雙擊事件,就很好實現,只需要為其增加一個MouseLister事件,然后判斷它的單擊次數就可以確定是不是雙擊了:
public void MouseClick(e)
{
int clickTimes=e.getClickCount();
if(clickTimes==2)
{
System.out.println(“Doublc Clicked!”);
}
}
如果是表格就不一樣了,因為表格的默認是單擊遠中,雙擊進行編輯,當進入編輯狀態后,不管你怎么雙擊,都不會算做又擊,且單擊也不算,只認為你在編輯狀態。你可以測試,為表格增加監聽事件,然后把上面的代碼改為如下:
public void MouseClick(e)
{
int clickTimes=e.getClickCount();
//當你每次單擊的時候,第一條都會顯示
//可是在表格中當進入編輯狀態后不論你怎么雙擊單擊都不會出現該條提示
//說明單擊事件不認在這個時候
System.out.println(“Single Clicked!”);
if(clickTimes==2)
{
System.out.println(“Doublc Clicked!”);
}
}
當然就不會出現雙擊事件了。
另注: 如果是把表格的enable設為false那么也和按鈕一樣可以實現雙擊,可是有意義嗎!! 我不知道。
那我們現在該怎么辦呢?
您可能已經想到了,就是利用兩次的時間間隔來確定是不是雙擊了。可是你可得小心哦,也許你的利用時間間隔來確定的雙擊事件就不能夠實現哦。
此時,你也許就會把你的代碼改成下面這樣:
…
long firstClick=0;
long secondClick=0;
boolean click=false;
…
public void mouseClicked(MouseEvent e)
{
int clickCount = e.getClickCount();
if(click==false)
{
firstClick=new Date().getTime();
System.out.println("firstClick:"+firstClick);
click=true;
}
else if(click==true)
{
secondClick=new Date().getTime();
System.out.println("secondClick:"+secondClick);
click=false;
}
//這里的這個時間你可以自己改一下,不過,這個范圍也合適,你看看吧
if (Math.abs((secondClick-firstClick)) < 200 && (secondClick-firstClick) > 30)
{
System.out.println("(secondClick-firstClick):"+(secondClick-firstClick));
System.out.println("firstClick2:"+firstClick);
System.out.println("secondClick2:"+secondClick);
System.out.println("Double Clicked!");
}
}
那你就在那里慢慢加上快快的點吧,可是總是也實現不了你要求的結果。為什么呢,不是雙擊,不是利用兩次時間間隔嗎,怎么會實現不了呢!!!!
忘了筆者上面說的嗎,就是雙擊進入后就不算了” 擊” 了。在這里,開始筆者也沒法,算了,不想了,出去上個走一下。
回來后,也許是頭清醒了一點,就把mousePressed方法寫成這樣
public void mousePressed(MouseEvent e)
{
System.out.println(“Pressed!”);
}
我運行一下程序,單擊表格,下面出現了Pressed! 這一行,這行正常,因為這既是單擊也是按了一下嗎,我雙擊,下面出來了一個好現象,出來了兩個Pressed! 。這使我一下就清醒了,原來雙擊,在這里同樣是說明按了兩次。
呵呵,我大笑三聲。
都知道怎么做了吧? 還不知道!!!!!
把下面MouseClicked中的內容,完全復制到Pressed事件中,一句都不要改:
public void mousePressed(MouseEvent e)
{
int clickCount = e.getClickCount();
if(click==false)
{
firstClick=new Date().getTime();
System.out.println("firstClick:"+firstClick);
click=true;
}
else if(click==true)
{
secondClick=new Date().getTime();
System.out.println("secondClick:"+secondClick);
click=false;
}
if (Math.abs((secondClick-firstClick)) < 200 && (secondClick-firstClick) > 30)
{
System.out.println("(secondClick-firstClick):"+(secondClick-firstClick));
System.out.println("firstClick2:"+firstClick);
System.out.println("secondClick2:"+secondClick);
System.out.println("Double Clicked!");
}
}
看見想要的結果了嗎,還沒有!!!
好了
我把全部的程序放在下面(我做測試用的,有點亂,不過肯定能夠行)。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTable;
import java.util.Date;
public class Test
extends JFrame
{
private BorderLayout borderLayout1 = new BorderLayout();
JFrame frame = new JFrame();
private JButton jButton1 = new JButton();
String[] title =
{ "表頭一", "表頭二" };
String[][] content =
{
{ "1", "2" },
{ "3", "4" } };
JTable table;
long firstClick=0;
long secondClick=0;
boolean click=false;
public Test()
{
try
{
table = new JTable(content, title);
jbInit();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Test().setVisible(true);
}
private void jbInit()
throws Exception
{
this.getContentPane().setLayout(borderLayout1);
this.setSize(new Dimension(441, 305));
jButton1.setText("jButton1");
jButton1.addMouseListener(new MouseListener()
{
/**
* 核心代碼
*/
public void mouseClicked(MouseEvent e)
{
int clickCount = e.getClickCount();
if (clickCount == 2)
{
System.out.println("Double Clicked!");
}
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
});
table.addMouseListener(new MouseListener()
{
/**
* 核心代碼
*/
public void mouseClicked(MouseEvent e)
{
int clickCount = e.getClickCount();
if(click==false)
{
firstClick=new Date().getTime();
System.out.println("firstClick:"+firstClick);
click=true;
}
else if(click==true)
{
secondClick=new Date().getTime();
System.out.println("secondClick:"+secondClick);
click=false;
}
if (Math.abs((secondClick-firstClick)) < 200 && (secondClick-firstClick) > 30)
{
System.out.println("(secondClick-firstClick):"+(secondClick-firstClick));
System.out.println("firstClick2:"+firstClick);
System.out.println("secondClick2:"+secondClick);
System.out.println("Double Clicked!");
}
}
public void mousePressed(MouseEvent e)
{
if(click==false)
{
firstClick=new Date().getTime();
System.out.println("firstClick:"+firstClick);
click=true;
}
else if(click==true)
{
secondClick=new Date().getTime();
System.out.println("secondClick:"+secondClick);
click=false;
}
if (Math.abs((secondClick-firstClick)) < 200 && (secondClick-firstClick) > 30)
{
System.out.println("(secondClick-firstClick):"+(secondClick-firstClick));
System.out.println("firstClick2:"+firstClick);
System.out.println("secondClick2:"+secondClick);
System.out.println("Double Clicked!");
}
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
});
this.getContentPane().add(jButton1, BorderLayout.NORTH);
this.getContentPane().add(table, BorderLayout.SOUTH);
}
}
記住,別忘了,好東西要和大伙分享哦!!~
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
JTable中的MOUSE雙擊事件相关推荐
- java jtable 监听事件_【Java】在JTable中设置鼠标监听器,点击操作对应数据
最终效果 鼠标点击JTable中任一数据,修改相应的信息. 确定点击的行和列 package com.dao; import java.awt.event.MouseAdapter; import j ...
- vue划入划出事件_基于vue中对鼠标划过事件的处理方式详解
鼠标事件进行监听 需求中,在一个table(组件)表中,对于其中一列(该列为图片列),当鼠标划过该列的某个单元格子(图片)时,需要展示出该单元格子对应的遮罩层 翻阅了一些博客,发现好多都提到了mous ...
- java jtable 按钮_java web 怎么在jtable中添加按钮?
展开全部 java web在jtable中添加按钮的示例如下:import java.awt.BorderLayout; import java.awt.Color; import java.awt. ...
- React中如何优雅的捕捉事件错误
React中如何优雅的捕捉事件错误 前话 人无完人,所以代码总会出错,出错并不可怕,关键是怎么处理. 我就想问问大家react的错误怎么捕捉呢? 这个时候: 小白:怎么处理? 小白+: ErrorBo ...
- 在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的值的解决方法
在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的值的解决方法 参考文章: (1)在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的 ...
- WPF中如何将ListViewItem双击事件绑定到Command
原文:WPF中如何将ListViewItem双击事件绑定到Command 今天的博客将介绍如何实现ListViewItem双击事件绑定到ViewModel中的Command.实现方法借助了Style中 ...
- SelectionKey中定义的4种事件
SelectionKey中定义的4种事件 SelectionKey.OP_ACCEPT -- 接收连接进行事件,表示服务器监听到了客户连接,那么服务器可以接收这个连接了SelectionKey.OP_ ...
- C# Dev控件中的 GridControl 双击行事件
在GridControl中的GridView的MouseDown事件中加入如下代码: DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hInfo ...
- swing程序中如何响应鼠标回车事件?
swing程序中如何响应鼠标回车事件? 参考这里实现:http://topic.csdn.net/u/20090806/17/b49846f5-cd76-467e-9b7c-21fe41846095. ...
最新文章
- lopa分析_【风险分析方法】HAZOP、LOPA和FMEA三种分析方法,如何做到信息共享?...
- mysql connector c 源码_mysql-connector-c-6.1.11-win32
- Shell文件的排序、合并和分割
- 依据imu姿态角计算z轴倾角_[姿态估计] DenseFusion详解
- 【JAVA实例】代码生成器的原理讲解以及实际使用
- Cesium Terrain Builder 非压缩瓦片
- ppt上的倒计时小工具_英孚线上精品小班课平台操作指南这些课堂小工具你都知道吗?更多课前指引看这里!...
- matlab矩阵排序sort,MATLAB数组元素的排序
- 3D建模和渲染的硬件配置怎么选?这里有答案
- 政务终端安全管理的三个视角
- 优秀logo,最基础的设计技巧(五)
- 杜国光博士,基于视觉的机器人抓取--物体定位,位姿估计到抓取估计课堂笔记
- 微信中H5+java+vue获取微信定位等JS-SDK
- uCLinux的编译
- MySQL数据库05 数据库控制和设计
- C++【引用】——串讲
- 测试udp服务的端口是否可用
- AD之相同模块布局布线方法
- docker 容器 日志文件过大
- python元素定位8大方法
热门文章
- 【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”
- 一线大厂在用的反爬虫方法,看我如何破了它!
- 数字化时代,规模不再是优势
- matlab绘制球面点,我需要在MATLAB的笛卡尔坐标中绘制球面方程的帮助
- 虚拟服务器dhcp,虚拟服务器上配置dhcp服务器
- 设计模式笔记十四:责任链模式
- A Style-Based Generator Architecture for Generative Adversarial Networks---阅读笔记
- 设置Markdown中展示Liquid(Jekyll)但不解析的方式
- LeetCode-402:移除k位数字
- 数字图像处理 空间域高斯低通滤波 MATLAB实验