Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.java > #1722

Re: DoubleClick et SingleClick

Newsgroups fr.comp.lang.java
From David Larochette <david@larochette.me>
Subject Re: DoubleClick et SingleClick
References <5bdf16f0$0$21588$426a74cc@news.free.fr> <20181104174758.480992a4@free.fr> <5be0a5bb$0$21620$426a74cc@news.free.fr>
Message-ID <slrnpu6hri.9h4.david@turing.larochette.me> (permalink)
Date 2018-11-07 20:13 +0000
Organization Guest of ProXad - France

Show all headers | View raw


Le 05-11-2018, jp <bloiiing@yahoo.invalid> a écrit :
> Le Sun, 04 Nov 2018 17:47:58 +0100, Yliur a écrit :
>
>
>>> 
>>> À l'exécution, lorsque je clique une fois ça m'affiche "SingleClick".
>>> Par contre lorsque je double clique ça m'affiche "SingleClick" puis
>>> tout de suite après "DoubleClick".
>>> 
>>> Ma question est, comment faire pour que ça n'affiche pas "SingleClick"
>>> lorsque je double clique?
>> 
>> Si je comprends bien tu as les deux événements qui s'affichent lors du
>> premier puis du second clic, tout simplement : lors du premier clic le
>> compteur est à 1, puis lors du clic immédiatement suivant il est à 2.
>> 
>> Tu ne devrais sans doute pas avoir un événement sur simple clic que tu
>> ne veux surtout pas exécuter lors d'un double clic : si on définit un
>> double clic comme deux clics successifs dans un temps donné, pour
>> détecter qu'il s'agit d'un simple clic il faudrait détecter le clic puis
>> attendre assez longtemps pour déterminer que ça ne peut pas être un
>> double clic. Tu pourrais le programmer, mais ça risque de rendre
>> l'interface "lourde", parce que les événements sur simple clic ne seront
>> pas traités rapidement.
>> 
>
> Aurais-tu un petit bout de code pour m'expliquer comment je peux détecter 
> le click et tester s'il s'agit d'un simple ou double click?

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

(code tiré de stackoverflow)
Ici, au moment du premier clic (donc le else du
if(e.getClickCount()...)), on crée un timer qui va exécuter la fonction
actionPerformed() à la fin d'un délai égal au réglage du double clic sur
le système. Dans cette fonction, on vérifie d'abord s'il n'ya pas eu
double clic entre temps grace au drapeau wasDoubleClick.

Cette gestion n'est pas forcément parfaite (quid des triples (ou plus)
clics, les lectures/écritures du drapeau sont-elle atomiques ? (sinon il
faut synchroniser), à la fin du délai (si le délai de double-clic est
très long sur le système), on est pas sûr que l'évènement soit encore
d'actualité...), mais elle couvre bien le cas général.

Back to fr.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

DoubleClick et SingleClick jp <bloiiing@yahoo.invalid> - 2018-11-04 15:57 +0000
  Re: DoubleClick et SingleClick Yliur <yliur@free.fr> - 2018-11-04 17:47 +0100
    Re: DoubleClick et SingleClick jp <bloiiing@yahoo.invalid> - 2018-11-05 20:19 +0000
      Re: DoubleClick et SingleClick Yliur <yliur@free.fr> - 2018-11-05 21:44 +0100
        Re: DoubleClick et SingleClick jp <bloiiing@yahoo.invalid> - 2018-11-06 12:29 +0000
      Re: DoubleClick et SingleClick David Larochette <david@larochette.me> - 2018-11-07 20:13 +0000
        Re: DoubleClick et SingleClick jp <bloiiing@yahoo.invalid> - 2018-11-09 02:06 +0000

csiph-web