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);
}
}
記住,別忘了,好東西要和大伙分享哦!!~
分享到:
相关推荐
今天,我们将探讨 Java Swing 中实现 JTable 检测单元格数据变更事件的方法。 一、使用 TableModel 的 addTableModelListener 方法 在 JTable 的初级教程中,我们往往会提到,使用 TableModel 的 ...
在Java的Swing库中,`JTable`是用于创建数据网格视图的重要组件,它允许用户以表格的形式查看和操作数据。而`JButton`则是一个常用的按钮控件,通常用于触发某些动作或事件。将`JButton`添加到`JTable`中可以为用户...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`...
JTable中加入复选框的两种方法 在Java中,JTable是一个常用的表格控件,用于显示和编辑表格数据。然而,在JTable中加入复选框是一个常见的需求,但是却不是那么容易实现。本文将介绍JTable中加入复选框的两种方法,...
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
在Java Swing应用中,JTable是一个非常常用的组件,用于显示和操作二维表格数据。当我们需要从Excel文件中读取数据并展示在JTable上时,就需要进行一系列的处理步骤。以下是一些关于如何实现这个过程的关键知识点: ...
"双击事件"和"单击事件"是交互式应用中常见的两种鼠标事件,主要用于响应用户的操作。本篇文章将深入探讨这两个概念,以及如何在Java编程中利用它们。 首先,我们来看**单击事件**。单击事件通常指的是用户对某个...
Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到...
在Java的Swing库中,JTable是一种非常重要的组件,用于展示二维数据表格。而将多个Button放入JTable的同一单元格中,可以提供更丰富的交互性,这在某些复杂的应用场景下是必要的。本教程将详细介绍如何在JTable中...
将JTable中的数据导出到Excel文件。
### Java中的JTable用法详解 #### 一、概述 JTable是Swing框架中用于显示和编辑表格数据的关键组件之一。它不仅提供了强大的数据管理功能,还支持丰富的定制选项,使得开发者能够根据具体需求创建出高度个性化的...
在Java编程环境中,`JTable`是Swing库中的一个核心组件,用于展示二维数据集,通常用于创建表格视图。这个组件对于用户界面(UI)设计尤其重要,尤其是在需要显示和编辑数据库或其他数据源数据时。下面我们将深入...
JTable组件提供了多种事件响应机制,例如选中单元格、双击单元格、按下键盘等。这些事件可以通过JTable的API来捕获和处理。 6. 实践项目:Java连连看 Java连连看是一个基于JTable组件的游戏项目。该项目需要实现一...
JTable使用 JTable使用JTable使用JTable使用
在"swing中JTable的简单使用"这个主题中,我们将深入探讨如何在Java Swing应用中有效地使用JTable。 首先,JTable是javax.swing.JTable类的实例,它是JFrame或JPanel等容器中的一个组件。JTable通常与TableModel...
在这个类中,开发者可能定义了`JTable`的列名,设置了行数和列数,还可能实现了表格的监听器,如`TableModelListener`,以响应数据更改事件。此外,`Table_01`可能还包含如何将`JTable`添加到`JScrollPane`以实现...
3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将列设为下拉框 4.表格排序 3. JTable事件响应和项目设想 4.一个游戏:《java连连看》 1.需求...
在Java Swing中,`JTable` 是用于展示二维数据的组件,它允许用户查看和编辑数据。本示例探讨如何在`JTable`中添加`CheckBox`,并实现表头的`JCheckBox`全选联动功能。这在需要用户进行多选操作的界面中非常常见,...
JTable的显示效果
JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 首先,在使用 JTable ...