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 :

Problème avec getRootPane().setDefaultButton(JButton)


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut Problème avec getRootPane().setDefaultButton(JButton)
    Bonjour,

    J'ai un problème avec la fonction getRootPane().setDefaultButton(JButton) sur un JDialog que je n'arrive pas à résoudre, alors je m'en remet à votre savoir pour m'aider...

    J'ai donc un JDialog qui contient 3 JPanel + 2 JButton... dans les JPanel j'ai des composants personnel (qui sont simplement composé de JPanel, JList et JButton), et donc un bouton "OK" et un bouton "annuler"...

    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getRootPane().setDefaultButton(getBtnOk());
    Je vois bien le bouton grisé sur le tour, mais par contre, la touche entrée n'a aucun effet...

    J'ai aussi essayé de mettre un listener sur le JDialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    this.addKeyListener(new java.awt.event.KeyAdapter() {
    			public void keyPressed(java.awt.event.KeyEvent e) {
    				if(e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER){
    					getBtnOk().doClick();
    				}
    			}
    		});
    Mais c'est pas mieux...

    On dirait que le bouton est "caché" je sais pas pourquoi...

    Auriez vous une idée du pourquoi que ca fait comme ca ?

    Merci pour votre aide !

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Essaie avec la touche ESPACE.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Bonjour et merci de ta réponse,

    En fait le listener ne réagit pour aucune touche (je pense que le problème est lié au fait que la fonction setDefaultButton() ne marche pas, mais il est vrai que je ne comprends pas trop pourquoi...

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    ajouter un KeyListener sur la JDialog ne va pas aider. Le mécanisme utilisé est celui des KeyBindings, qui permet de capturer des évènements clavier même sans le focus.

    Dans ta JDialog, lorsque tu appuies sur entrée, quel est le composant qui a le focus ? Si ce composant a un KeyListener, ou qu'il a un KeyBinding pour la touche entrée, le KeyEvent sera consommé et ne sera pas délivré à la JDialog.
    Il faut aussi vérifier que les parents du composant n'aient pas de keyBinding, mais pour la touche entrée je ne vois pas ce que ça pourrait être.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Merci pour ta réponse,

    J'ai, en effet, réussi à simuler le clic sur le bouton, mais je ne sais pas pourquoi la fonction setDefaultButton() ne marche pas...

    Voilà le code que j'ai du mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Action enter = new AbstractAction() {
    		    public void actionPerformed(ActionEvent e) {
    		       getBtnOk().doClick();
    		    }
    		};
    		this.getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"Entrer");
    this.getRootPane().getActionMap().put("Entrer", enter);
    Je laisse le soin aux experts de commenter le fonctionnement et le non-fonctionnement surtout de setDefaultButton() pour plus de précision

    Merci en tout cas

    EDIT : J'ai crié victoire un peu vite... le code ci dessus marche quand on ne donne pas le focus a un composant par contre si on sélectionne un JTextField dans la page par exemple, alors la touche entrée ne provoque plus rien...

    Je retourne à mes recherches...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Après investigation sur le setDefaultButton(), il s'avère que dès que je rajoute un de mes composants (j'en ai deux), le bouton entrée ne réagit plus...

    Mes composants sont simplement des classes qui hérite de JPanel et qui contiennent une JTable (avec un JScrollPane) et de deux JButton + un JTextField... La je bloque vraiment... Doit y avoir un truc que j'ai pas compris...

  7. #7
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Peux-tu nous faire un programme court, avec un seul source java, qui montre le phénomène qui te gène, que l'on puisse te trouver la solution ?
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    Voilà le code qui correspond a mon problème, j'espère que ca vous aidera a comprendre le problème...
    Fichiers attachés Fichiers attachés

  9. #9
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    La faute est à la JTable qui capte les retours chariots pour assurer la navigation au clavier dans les cellules.

    Pour résoudre ce problème, il faut rajouter, par exemple au niveau de ta méthode getTable(), la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    table.
     getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
     put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"none");
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Points : 131
    Points
    131
    Par défaut
    En effet, il s'agit bien de cela !!

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/04/2011, 15h54
  2. [JButton][JTabbedPane] Problème avec un listener
    Par mitnick2006 dans le forum Composants
    Réponses: 14
    Dernier message: 16/08/2008, 19h28
  3. Problème avec mes JButton
    Par zwibir dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/12/2007, 20h04
  4. Swing : problème avec un Jbutton
    Par Gilouou dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/11/2006, 00h37
  5. Problème avec JButton
    Par bressan dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 20/06/2006, 13h01

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