我想知道在组件中双击鼠标时我们如何执行操作。
问问题
70251 次
4 回答
95
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2 && event.getButton() == MouseEvent.BUTTON1) {
System.out.println("double clicked");
}
}
于 2010-10-29T12:09:02.970 回答
22
假设您的意思是在 Swing 中,将 MouseListener 分配给您的组件:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
参考:
- Java 教程:如何编写鼠标监听器
于 2010-10-29T12:16:07.463 回答
20
如果您想让您的用户在短时间内执行多次双击,这e.getClickCount()==2
还不够。您受到桌面配置的限制。你可以通过查看结果来得到它 Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
绕过这个问题的一个好方法是不使用getClickCount()
检查,而是使用一个Timer
你可以选择点击之间的最大间隔并自己处理计数的地方(非常简单)。
相关代码:
boolean isAlreadyOneClick;
@Override
public void mouseClicked(MouseEvent mouseEvent) {
if (isAlreadyOneClick) {
System.out.println("double click");
isAlreadyOneClick = false;
} else {
isAlreadyOneClick = true;
Timer t = new Timer("doubleclickTimer", false);
t.schedule(new TimerTask() {
@Override
public void run() {
isAlreadyOneClick = false;
}
}, 500);
}
}
经 Win Xp 操作系统测试,完美。
于 2013-09-24T19:48:37.517 回答
0
我的问题是,如果用户单击,我必须以一种方式响应,如果他们单击不止一次,则必须以另一种方式响应(当我多次单击时,我的 Swing VM 似乎最多可以计数四次单击)。当我运行上面的示例时,它似乎将三次单击计为一次单击。所以,这是我的重写。基本上,我只有一个计划任务,等待灰尘清除,然后检查注册的点击次数。400 毫秒的等待似乎最适合我。
JButton jButton = new JButton("Click Me!");
jButton.addMouseListener(new MouseAdapter() {
private int eventCnt = 0;
java.util.Timer timer = new java.util.Timer("doubleClickTimer", false);
@Override
public void mouseClicked(final MouseEvent e) {
eventCnt = e.getClickCount();
if ( e.getClickCount() == 1 ) {
timer.schedule(new TimerTask() {
@Override
public void run() {
if ( eventCnt == 1 ) {
System.err.println( "You did a single click.");
} else if ( eventCnt > 1 ) {
System.err.println("you clicked " + eventCnt + " times.");
}
eventCnt = 0;
}
}, 400);
}
}
});
于 2019-03-31T17:29:53.530 回答