[英]identifying double click in java
我想知道在組件中雙擊鼠標時我們如何執行操作。
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2 && event.getButton() == MouseEvent.BUTTON1) {
System.out.println("double clicked");
}
}
假設您的意思是在 Swing 中,為您的組件分配一個 MouseListener:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
參考:
如果您想讓您的用戶在短時間內進行多次雙擊,則e.getClickCount()==2
是不夠的。 您受到桌面配置的限制。 您可以通過查看Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
的結果來獲取它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);
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.