Java: ignorer un simple clic sur un double clic?
quelqu'un peut penser à une bonne façon d'ignorer le clic unique qui vient avec un double-clic dans Java ?
Je cherche à avoir des comportements différents pour chaque tels que:
- cliquez peintures réticule sur le point sur lequel vous cliquez
- double-clic sélectionne un objet à l'écran, mais devrait pas peinture réticule sur le point sur lequel vous cliquez
... quelqu'un peut penser à une façon de le faire ? Une sorte de timer set-up peut-être ? Une des idées apprécié 🙂
<avertissement> ...et oui, je sais que je suis en train de commettre un plus odieux de l'utilisabilité /UI faux pas. </avertissement>
EDIT #2:
Même si cela fonctionne le retard dû à la minuterie est affolant - je suis l'abandon de cette solution, et en utilisant le clic du milieu pour la sélection au lieu de double-cliquer sur...
EDIT:
Grâce cgull - c'est ce que j'ai été en mesure de venir avec votre confirmation qu'il n'y a pas de moyen facile de le faire (à noter que si je mets le minuteur < 200 bizarre de course est observée entre le click & de la minuterie, mais aussi longtemps que je le régler à une valeur > 200 choses fonctionnent tout peachy) :
public void mouseClicked(MouseEvent e) {
System.out.println( "Click at (" + e.getX() + ":" + e.getY() + ")" );
if (e.getClickCount() == 2) {
System.out.println( " and it's a double click!");
wasDoubleClick = true;
}else{
Integer timerinterval = (Integer)
Toolkit.getDefaultToolkit().getDesktopProperty(
"awt.multiClickInterval");
timer = new Timer(timerinterval.intValue(), new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (wasDoubleClick) {
wasDoubleClick = false; //reset flag
} else {
System.out.println( " and it's a simple click!");
}
}
});
timer.setRepeats(false);
timer.start();
}
}
source d'informationauteur Dave Carpeneto
Vous devez vous connecter pour publier un commentaire.
En effet, vous aurez besoin de configurer un Minuteur dans votre substituée mouseClicked() la méthode de votre MouseAdapter pour détecter l'intervalle de temps entre les deux clics. L'intervalle par défaut de ms peuvent être trouvés en interrogeant
Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")
. Si un autre clic de souris est détectée avant l'expiration de la minuterie, puis vous avez un double-clic, d'autre une fois que le temporisateur expire, vous pouvez traiter la simple clic.En fait, je pense qu'il y a une solution plus simple (utilisation InputEvent de getWhen () (méthode):
Avez-vous essayé de mise en œuvre de l'interface MouseListener déjà?
Je pense que MouseEvent a un clic compter de la méthode ( ou la propriété ) pour le savoir.
Je parie que vous avez traversé déjà, alors quel est le problème auquel vous faites face?
Probablement ce que vous pouvez faire est de code de l'intervalle de temps écoulé entre un simple et un double clic sur un fil ou quelque chose.
Donc un seul clic ne sera valable que si un autre clic n'est pas délivré dans, disons, 300 ms. ( quelque chose configurable )
L'idée est la suivante:
Ou quelque chose comme ça.
Une solution alternative:
J'ai pensé à cela avant que j'ai trouvé la solution à cette question. L'idée est la même, l'utilisation d'une minuterie, bien que plus compliqué :).
Utilisation
SwingWorker
:Dans
mouseClicked()
méthode, vous pouvez faire quelque chose comme ceci:J'espère qu'il sera utile.