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 :

Traitement du focus + clic


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut Traitement du focus + clic
    Bonjour,

    J'avais eu un soucis, mais apparement le message a été victime du crash de la BDD. Du coup, je refais le post (un peu plus concis) avec la soluce, si jamais ça peut aider quelqu'un.


    J'ai un JPanel (nommé jpLigne) avec un JTextField et un JButton, non visible par défaut (pour faire simple).
    Quand je clic sur le JTextField, je colore celui-ci pour faire un effet de sélection, donc sur le FocusGained de mon JTextField, et rend visible mon JButton.
    Lorsque je clic sur mon JButton, j'aimerais avoir toujours le focus d'activer (du moins, la coloration) et l'action de mon actionPerformed du JButton, car dès que le JTextField a le focus, ça inhibe, du moins j'ai l'impression, le actionPerformed (je sais pas d'où ça vient).

    Re,

    Peut-être qu'un peu de code peut aider à la compréhension :

    - Gestion des Focus (simplifier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public void focusGained(FocusEvent arg0)
    	{
    		ColorSelect(true);
            }
     
    	public void focusLost(FocusEvent arg0)
    	{
    		ColorSelect(false);
            }

    Avec la méthode ColorSelect :

    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
    	public void ColorSelect(boolean isFocusGained)
    	{
    		if(isFocusGained)
    		{
    			jtextfield.setBackground(new Color(234,68,152));
    			jtextfield.setForeground(Color.white);
    			jtextfield.setOpaque(true);
    	                jbutton.setVisible(true);
    		}
    		else
    		{
    			jtextfield.setBackground(null);
    			jtextfield.setForeground(Color.black);
    			jtextfield.setOpaque(false);
    			jbutton.setVisible(false);
    		}
     
    	}

    où la méthode ColorSelect(boolean f) me fait ma coloration de fond et me permet de rendre mon bouton visible.

    - Action de mon bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	public void actionPerformed(ActionEvent arg0)
    	{
    		jtextfield.settext("quelque chose");
            }
    Lorsque je clic sur mon bouton, j'ai l'impression qu'il exécute le bloc du FocusLost avant mon actionPerformed (et donc ne fait rien coté clic du bouton), or il me faudrait qu'il execute mon bloc actionPerformed puis le FocusLost.

    Après quelques messages (fraco et Claythest), le plus simple est de faire partager le focus au jtextfield et au jbutton (je croyais que pour les JButton, ce n'était pas possible), sur les recommandations de Claythest ; et ça fonctionne (donc, un addFocusListener pour le jtextfield et jbutton) et le code devient :

    - Gestion des Focus (simplifier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public void focusGained(FocusEvent arg0)
    	{
    		ColorSelect(true);
            }
     
    	public void focusLost(FocusEvent arg0)
    	{
    		ColorSelect(false);
            }
    - Avec la méthode ColorSelect :
    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
    	public void ColorSelect(boolean isFocusGained)
    	{
    		if(isFocusGained)
    		{
    			jtextfield.setBackground(new Color(234,68,152));
    			jtextfield.setForeground(Color.white);
    			jtextfield.setOpaque(true);
     
    			if(isMidiFerme)
    				jbutton.setVisible(false);
    			else
    				jbutton.setVisible(true);
    		}
    		else
    		{
    			jtextfield.setBackground(null);
    			jtextfield.setForeground(Color.black);
    			jtextfield.setOpaque(false);
    			jbutton.setVisible(false);
    		}
    	}
    Voili voilou, Bonne journée

  2. #2
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Merci pour nous avoir tenu informé

    Une petite remarque quant à la solution (si j'ai bien tout compris) : quand l'utilisateur clique sur le bouton, la méthode focusLost est appelée sur le textField (le mettant en grisé, faisant disparaitre le bouton, ...) puis la méthode focusGained est appelée sur le JButton (faisant réapparaitre le bouton et mettant le textField en mode "normal"). Ce mécanisme pourrait donner un comportement peu agréable si le clignotement devient visible (sur une machine peu puissante ou surchargée...).

    Il te faut peut être optimiser le truc en testant qui a perdu le focus, qui l'a gagné, pour ne pas faire clignoter le text field et le bouton s'il n'y en a pas besoin... Le focus event arg0 te permet de savoir qui a obtenu le focus et qui l'a perdu...

    Pareil que l'autre jour, je n'écris pas le code (la flemme de vérifier que tout marche correctement ), je te laisse le soin de le faire si tu en as besoin, mais je reste dispo si tu as besoin de plus d'infos ou d'aide

  3. #3
    Membre confirmé Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Par défaut
    Re,

    Effectivement, ça peut-être non négligeable ;-)

    Pour le code, no pb, lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/02/2015, 11h08
  2. Connaitre l'élément qui a le focus avant un clic bouton
    Par tommyknocker dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 24/07/2012, 03h12
  3. Réponses: 6
    Dernier message: 24/04/2010, 18h49
  4. Réponses: 10
    Dernier message: 05/01/2010, 19h02
  5. [JSP] Réaliser un traitement après clic sur un lien donné
    Par Ataman dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/06/2006, 10h42

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