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);
}
}
記住,別忘了,好東西要和大伙分享哦!!~
分享到:
相关推荐
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
swing 中JTABLE中添加控件的例子 可以引申出添加很多控件
主要介绍了Java Swing实现JTable检测单元格数据变更事件的方法,结合完整实例形式分析了Swing实现JTable检测单元格数据变更事件过程中出现的问题与相关解决方法,需要的朋友可以参考下
JTable 在一个单元格放入多个按钮,
Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到...
介绍了jtable中加入复选的难点的俩个例子,方便大家更好的学习.
将JTable中的数据导出到Excel文件。
将Excel内容按照行列复制到JTable中,JTable的行列的增删
JTable使用 JTable使用JTable使用JTable使用
3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将列设为下拉框 4.表格排序 3. JTable事件响应和项目设想 4.一个游戏:《java连连看》 1.需求...
JTable的显示效果
这些是JAVA中table的一些用法,希望对你java中Jtable 初学者有一些帮助
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
java实现的,一种JTable中多列排序的实现方法
Java + JDBC + Sql 2005 + JTable ...1,从 SQL 中读取数据,并显示在 JTable 中。 2,在 JTable 中实现排序,并可实现不同数据类型用不同的排序方法 3,JTbale 中添加、删除、更新行,并实时更新到数据库中 源码说明 ...
JTable+显示数据库中的记录 JTable+显示数据库中的记录 JTable+显示数据库中的记录
本文档主要讲述的是java表格控件JTable常用操作详解;JTable是Swing编程中很常用的控件,文中总结了一些常用方法以备查阅。
JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据
swing中jtable的一个单元格多放多个button的实现方式
Java的Jtable、从数据库取数据显示在表格中