webentwicklung-frage-antwort-db.com.de

Identifizierender Doppelklick in java

Ich möchte wissen, wie wir Aktionen ausführen können, wenn die Maus in einer Komponente doppelt angeklickt wird.

48
Suraj Air
public void mouseClicked(MouseEvent event)
{
  if (event.getClickCount() == 2) {
    System.out.println("double clicked");
  }
}
81
kaliatech

Angenommen, Sie meinen in Swing, ordnen Sie Ihrer Komponente einen MouseListener zu:

addMouseListener(new MouseAdapter(){
    @Override
    public void mouseClicked(MouseEvent e){
        if(e.getClickCount()==2){
            // your code here
        }
    }
});

Hinweis:

20

Die Funktion e.getClickCount()==2 reicht nicht aus, wenn Sie Ihren Benutzern erlauben möchten, mehrere Doppelklicks in kurzer Zeit auszuführen. Sie sind durch die Desktop-Konfiguration eingeschränkt. Sie können es erhalten, indem Sie das Ergebnis von Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"); ansehen.

Eine gute Möglichkeit, das Problem zu umgehen, besteht darin, nicht das Kontrollkästchen getClickCount() zu verwenden, sondern ein Timer, in dem Sie das maximale Intervall zwischen Ihren Klicks auswählen und die Anzahl selbst bestimmen können (sehr einfach) ).

Der zugehörige Code:

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);
    }
}

Getestet mit Win XP OS und perfekt.

17
davidxxx

Mein Problem ist, dass ich auf eine Weise reagieren muss, wenn der Benutzer einmal klickt, auf eine andere, wenn er mehr als einmal klickt (mein Swing VM) scheint in der Lage zu sein, bis zu vier Klicks zu zählen, wenn ich klicke Als ich das obige Beispiel ausgeführt habe, schien es, als würde es einen Dreifachklick als einen einzigen zählen. Also, hier ist mein Umschreiben. Grundsätzlich habe ich nur eine geplante Aufgabe, die wartet, bis der Staub verschwindet und dann die Anzahl von überprüft clicks registered. Die 400 ms Wartezeit scheinen für mich am besten zu funktionieren.

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);
        }
    }
});
0
Warren Weis