我想知道如何在组件中双击鼠标时执行操作。
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2) {
System.out.println("double clicked");
}
}
假设您的意思是在Swing中,将MouseListener分配给您的Component:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
参考:
如果您希望允许用户在短暂延迟中进行多次双击,那么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 OS测试并完美。
我的问题是,如果用户单击,我必须以一种方式响应,如果他们点击多次,我必须以另一种方式响应(当我多次点击时,我的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);
}
}
});