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

AWT/Swing Java Discussion :

MouseEvent sur un bouton pour le retrécir


Sujet :

AWT/Swing Java

  1. #1
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut MouseEvent sur un bouton pour le retrécir
    Bonjour, j'ai une interface ou l'utilisateur peut passer sa souris sur un bouton et j'aimerais faire un effet de rétrécissement sur ce dernier ! Lorsque que je passe sur le bouton, celui ne se retricie qu'une fois, peut-on donner un effet de retreciement sur un bouton ?

    Ma méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void mouseEntered (MouseEvent e) 
    {
    getApplicationFrame().boutonPeutEtre.setBounds(200, 100, getApplicationFrame().tailleLargeurBouton-1, getApplicationFrame().tailleHauteurBouton-1);
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Ne pas oublier qu'il faut rétablir la taille du bouton lorsque l'utiliseateur retire la souris du bouton, donc complete le code de mouseExited avec le code permettant de rendre au bouton sa taille normale.

  3. #3
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Avec un mouseMoved peut-être?
    A chaque appel tu diminue d'un cran (avec une limite quand même ;-)).
    Je suppose que même lors d'un rollover il y toujours suffisement de mouvement pour que le mouseMoved soit appelé suffisement de fois.

    http://javasearch.developpez.com/j2s...ent.MouseEvent)

    Et puis revenir à la taille initiale sur un mouseExit

  4. #4
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Citation Envoyé par Crowell
    Ne pas oublier qu'il faut rétablir la taille du bouton lorsque l'utiliseateur retire la souris du bouton, donc complete le code de mouseExited avec le code permettant de rendre au bouton sa taille normale.
    Autant pour moi je pensais que la problèmatique était de créer une "animation" pas un retour à l'état initial.

    A noter que si tu utilises des images une rollover icon de taille plus réduite fait l'affaire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Si la problematique est de faire un retrécissement et un retour a la normale en n etapes, il suffirait de faire une boucle ou la taille serait modifiée d'un cran, puis une pause avec Thread.sleep(x); je suppose.
    Dsphinx peux tu préciser quel effet souhaites-tu obtenir?

  6. #6
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Merci de vos conseils.

    J'ai implémenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void mouseEntered (MouseEvent e) 
    {
    getApplicationFrame().boutonPeutEtre.setBounds(200, 100, getApplicationFrame().tailleLargeurBouton-1, getApplicationFrame().tailleHauteurBouton-1);
    getApplicationFrame().tailleHauteurBouton = getApplicationFrame().tailleHauteurBouton-1;
    getApplicationFrame().tailleLargeurBouton = getApplicationFrame().tailleLargeurBouton-1;
    }
    Mais il faut à chaque fois passé sur le bouton pour le rétricir ! J'aimerais que lorsque l'on reste dessus il rétrecisse !

  7. #7
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Essaye d'abord avec mouseMoved.
    Si ça ne marche pas tu peux toujours mettre en place un timer que tu lances sur mouseEntered et arrête sur mouseExit.

  8. #8
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Sinon avec des images: un gif animé en rollover icon c'est simple et pas gourmand (mais bon ça boucle...)

  9. #9
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Pour répondre à la question, je voudrais que lorsque le curseur de la souris reste sur le bouton, ce dernier retrecisse automatiquement sans devoir entrer et sortir du composant !

    J'essaye avec MouseMoved!

    Merci !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Mmm le probleme c'est que si dans ton mouseEntered tu boucles sur le code de retrecissement, tu n'es plus a l'ecoute du reste (clic sur le bouton ou evenement mouseExited par exemple), je ne vois qu'un thread pour corriger ça.
    Ceci dit je débute donc donnez vos avis ça m'interesse de voir quelles sont les solutions possibles.

  11. #11
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Testé avec une boucle for mais il disparait d'un coup ! J'aimerais avoir cet effet visuel que mon utilisateur puisse voir le bouton retrécir !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i;
     
    for(i = 0; i < 20; i++)
    {
    getApplicationFrame().boutonPeutEtre.setBounds(200, 100, getApplicationFrame().tailleLargeurBouton-1, getApplicationFrame().tailleHauteurBouton-1);
    getApplicationFrame().tailleHauteurBouton = getApplicationFrame().tailleHauteurBouton-1;
    getApplicationFrame().tailleLargeurBouton = getApplicationFrame().tailleLargeurBouton-1;
    }
    Peut-on marquer un temps de pause dans la boucle ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Attente d'un tier de seconde entre chaque iteration :

    Thread.yield();
    try {
    Thread.sleep(300);
    } catch (InterruptedException e1) {}

  13. #13
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Merci Crowell mais ca donne pas l'effet souhaiter !

  14. #14
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Citation Envoyé par Crowell
    Mmm le probleme c'est que si dans ton mouseEntered tu boucles sur le code de retrecissement, tu n'es plus a l'ecoute du reste (clic sur le bouton ou evenement mouseExited par exemple), je ne vois qu'un thread pour corriger ça.
    Ceci dit je débute donc donnez vos avis ça m'interesse de voir quelles sont les solutions possibles.
    oui bien sûr!
    Quand je dis "lancer un timer", je ne compte pas mettre une attente active dans un mouseEntered!
    Je donnais juste les points de synchro pour une méthode alternative que je trouve un peu lourde pour de l'affichage (encore qu'un affichage soigné ça n'a pas de prix).
    Quand à l'implémentation, je n'en pas la moindre idée car ce n'est pas le genre de chose que je pratique en java (même si j'en ai bouffé plus que de raison en c sur OS temps réél).
    Cela étant dit ça ne doit être très dur de trouver des exemples, ce n'est pas bien exotique.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Citation Envoyé par Dsphinx
    Merci Crowell mais ca donne pas l'effet souhaiter !
    Tu as fait un update(getGraphics()); pour mettre à jour l'affichage?
    Sinon tu n'auras de changement qu'a la fin de la boucle ce qui n'est pas souhaité.

  16. #16
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Tu as fait un update(getGraphics());
    si c'est pas trop demandé, comment tu mets en place cette maj de l'interface ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    Je n'ai pas testé le code mais ça devrait ressembler à ça je pense
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    	// les declarations
     
    	boolean retrecissement ;
    	public int tailleNormale = 100; // a adapter a ton bouton
    	public int tailleMinimale = 80; // a adapter a ton bouton
     
    // les events
    	public void mouseEntered (MouseEvent e) {
    		retrecissement=true;
    		new Thread(){
    			public void run() {
    				while( boutonPeutEtre.getWidth()>tailleMinimale && retrecissement==true )
    				{
    					boutonPeutEtre.setSize(boutonPeutEtre.getWidth()-1,boutonPeutEtre.getHeight()-1);
     
    					Thread.yield();
    					try {
    						Thread.sleep(300);
    					} catch (InterruptedException e1) {}
     
    					update(getGraphics());
    				}
    			}
     
    		}
    	}
     
    	public void mouseExited(MouseEvent e) {
    		retrecissement=false;
    		new Thread(){
    			public void run() {
     
    				while( boutonPeutEtre.getWidth()<tailleNormale && retrecissement==false )
    				{
    					boutonPeutEtre.setSize(boutonPeutEtre.getWidth()+1,boutonPeutEtre.getHeight()+1);
     
    					Thread.yield();
    					try {
    						Thread.sleep(300);
    					} catch (InterruptedException e1) {}
     
    					update(getGraphics());
    				}
    			}
     
     
    		}
    	}

  18. #18
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Ah merci bcp !!! La méthode update(getGraphics()); n'est pas reconnue ! Dois-je la créer ?

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Par défaut
    il faut l'appliquer a ton panel ou ta frame.
    pan.update(getGraphics());
    j'ai modifié un peu le code et je j'ai testé, le résultat chez moi est satisfaisant.

  20. #20
    Membre éprouvé Avatar de Dsphinx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    Merci ! c'est gentil ! mais Eclipse me demande de créer la méthode getGraphics() !

    Voici ce que j'ai mis en place (j'ai du rajouter un ; et parametrer selon l'architecture MVC:

    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
    22
    23
    24
    	public void mouseEntered (MouseEvent e)
    	{
    		retrecissement=true;
    		new Thread()
    		{
    			public void run()
    			{
    				while( getApplicationFrame().boutonPeutEtre.getWidth()>tailleMinimale && retrecissement==true )
    				{
    					getApplicationFrame().boutonPeutEtre.setSize(getApplicationFrame().boutonPeutEtre.getWidth()-1,getApplicationFrame().boutonPeutEtre.getHeight()-1);
     
    					Thread.yield();
    					try
    					{
    						Thread.sleep(300);
    					}
    					catch (InterruptedException e1) {}
     
    					getApplicationFrame().MonPanel.update(getGraphics());
    				}
    			}
     
    		}
    	}
    Bref Eclipse me souligne en rouge getGraphics et empeche l'application de se lancer !

Discussions similaires

  1. click sur un bouton pour commande executée
    Par fred1599 dans le forum Tkinter
    Réponses: 14
    Dernier message: 13/12/2007, 17h24
  2. cliquer sur un bouton pour lancer la macro
    Par tarik847 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/08/2007, 11h36
  3. cliquer sur un bouton pour tout selectionner dans une liste multiple
    Par PAYASS59 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/07/2007, 15h33
  4. petite confirmation sur 2 boutons pour un meme formulaire
    Par grinder59 dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2007, 10h06
  5. [VB.NET] Clic sur un bouton pour afficher une form existante
    Par beegees dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/06/2006, 10h31

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