IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[Jbutton] bouton pressé et double click


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut [Jbutton] bouton pressé et double click
    Salut,

    J'ai une JToolBar qui va bien avec des JButton sympas aussi.
    Mais pour l'instant, je n'intercepte que les clicks sur ces bouttons, et non pas d'autres événements tels que :
    - bouton maintenu appuyé (pour mon bouton stepBackward),
    - double click sur le bouton (pour mon bouton zoomOut)...

    Ca se fait ?
    Comment ?

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Qq chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MouseListener listenMouse = new MouseAdapter() {
    public void mousePressed(MouseEvent e) {System.out.println("Mouse Pressed !");}
    } ;
    Mais si je maintiens le bouton appuyé, je n'ai qu'un seul appel à System.out.println... or je veux autant d'appels que possible, aussi longtemps que le bouton est maintenu appuyé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Par défaut
    Je propose une solution, mais ce n'est pas forcément la meilleure. D'autant plus que le contexte d'utilisation de cette action ne m'est pas précisé clairement. C'est une très mauvaise idée de donner ce comportement à un bouton back si c'est une sorte de visionneuse d'images que tu essaies de créer.

    Lorsque le bouton de la souris est pressé (mousePressed) :
    - création d'un timer : appelle à toutes les secondes (ou à la fréquence dont tu as besoin) une fonction qui contient ton System.out.println();.

    Lorsque le bouton de la souris est relâché (mouseReleased) :
    - destruction du timer


    Edit :

    Un petit exemple, mais je ne trouve pas la solution très propre : P Quelqu'un à mieux?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            final Timer mouseTim = new Timer("timerMouse");
     
            MouseListener mouseList = new MouseAdapter() {
     
                public void mousePressed (MouseEvent e) {
                    mouseTim.scheduleAtFixedRate(
                            new TimerTask() {
     
                                @Override
                                public void run () {
                                    System.out.println("Texte à chaque seconde");
                                }
                            }, 10, 1000); //À chaques 1000 milisecondes
                }
     
                public void mouseReleased (MouseEvent e) {
                    mouseTim.cancel();
                }
            };
     
            bouton.addMouseListener(mouseList);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Citation Envoyé par Exoss Voir le message
    D'autant plus que le contexte d'utilisation de cette action ne m'est pas précisé clairement. C'est une très mauvaise idée de donner ce comportement à un bouton back si c'est une sorte de visionneuse d'images que tu essaies de créer.
    Non c'est un phénomène quasi continu qu'il s'agit d'explorer. Je veux le même genre de comportement que les flèches du clavier, les boutons d'ascenseur, les boutons avance et recul rapide d'un lecteur video ou mp3.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Et pour le double click ?
    Je veux qu'un double click sur le bouton ZoomOut donne accès à l'ensemble des données, un double click sur ZoomIn fasse passer d'un coup à la résolution maximale, un peu à la façon d'un double click sur l'outil loupe de Photoshop.
    Là aussi il faut que je construise un écouteur avec un timer ??

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    Citation Envoyé par sepas Voir le message
    Ca se fait ?
    Pour le double click, je crois que ce n'est pas trop difficile :

    dans ta méthode : public void mouseClicked (MouseEvent e)

    tu utilise e.getClickCount() qui te donne le nombre de click effectué, s'il n'y en a qu'un tu continue d'utiliser le code que tu as déjà et s'il y a deux click, donc un double click tu peux renvoyer vers un autre code.

    j'espère avoir été clair.

    Bon courage.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut JButton et double click
    Citation Envoyé par firgon Voir le message
    tu utilise e.getClickCount() qui te donne le nombre de click effectué, s'il n'y en a qu'un tu continue d'utiliser le code que tu as déjà et s'il y a deux click, donc un double click tu peux renvoyer vers un autre code.
    Comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MouseListener zoomOutMouseListener = new MouseAdapter() {
    	public void mouseClicked(MouseEvent e) {
    		if (e.getClickCount()==1) zoom(1) ;
    		else if (e.getClickCount()==2) zoomOut();
    	}
    } ;
    Ca marche, mais mal :
    - le click est interprété comme un click simple (zoom arrière) impeccable.
    - le double click est interprété comme un click simple (zoom arrière), PUIS comme un double click (zoom arrière maximal), effet final désiré, mais effet intermédiaire visuellement désagréable.

    On peut faire mieux ?

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    mince

    désolé, mais effectivement, c'est logique, MouseClicked génére effectivement deux évenements, l'un avec ClickCount=1, l'autre avec Clickcount=2. Il doit très certainement avoir un moyen de contourner cette petite contrariété.

    A mon avis il faut continuer de chercher dans cette voie. ( mais si, mais si..)

    Bon courage.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Bon, j'abandonne l'idée du double click sur le bouton et je me débrouille à la place avec un menu déroulant avec entre autre les items zoom min et zoom max.

    Mais reste le pb de l'effet de répétition de l'action quand le bouton forward ou backward est maintenu appuyé.

    Je prends la solution d'Exos ou on peut faire mieux ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 27
    Par défaut
    Si tu augmente la fréquence? Au 10 milisecondes par exemple. Je crois que tu peut obtenir un effet similaire non? D'après moi la clé se trouve dans le laps de temps.

    Aussi, tu peut toujours créer un nouveau thread, lors du mousePressed qui comporte une boucle while. Tant que le bouton n'est pas relâché le while continue... C'est gourmand en ressources par contre, et un peu plus tordu .

Discussions similaires

  1. double click sur bouton n'accède plus à la fonction sur VS2012 ?
    Par PatricePatrice dans le forum Visual Studio
    Réponses: 1
    Dernier message: 21/04/2014, 18h01
  2. Réponses: 11
    Dernier message: 10/01/2008, 20h27
  3. [VB.NET] DataGrid et double click
    Par mic56 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/11/2006, 04h37
  4. double click sur un bouton
    Par gdpasmini dans le forum Windows
    Réponses: 7
    Dernier message: 10/05/2006, 14h38
  5. OnMouseUp et double click
    Par DBBB dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/12/2004, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo