我想知道如何在组件中双击鼠标时执行操作。
答案 0 :(得分:80)
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2) {
System.out.println("double clicked");
}
}
答案 1 :(得分:20)
假设您的意思是在Swing中,请将MouseListener指定给您的Component:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
<强>参考:强>
答案 2 :(得分:16)
如果您希望允许用户在短暂延迟中进行多次双击,则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测试并完美。
答案 3 :(得分: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);
}
}
});