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 :

Touche Ctrl + Tab pour changer de JInternalFrame


Sujet :

AWT/Swing Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut Touche Ctrl + Tab pour changer de JInternalFrame
    Salut à tous,
    J'ai créer un application de type MDI(multi document interface).
    Je voudrais definir les touches ctrl + tab pour changer la fenetre interne active.
    Et je ne vois pas comment faire. J'ai bien tenté de rajouter un item switch à mon menu
    et definir un keyStroke(raccourci clavier) pour mon item switch mais apparement la combinaison CTRL-tab est prédéfinie pour autre chose.
    En effet dans mon menu à la place d'afficher "Ctrl-Tab", il affiche "Ctrl-Onglet" et le raccourci clavier ne marche pas.
    Donc si quelqu'un sait comment je peut mis prendre...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    J'ai essayer une autre methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*on recupere la inputMap du composant qui a le focus*/
            InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
            /*on rajoute un cle et une valeur*/
            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.CTRL_MASK), "altab");
            /*on recupere l'actioMap du root pane et on i ajoute l'action à effectuer*/
            rootPane.getActionMap().put(
                    "altab",
                    new AbstractAction("altab") {
                        public void actionPerformed(ActionEvent actionEvent) {
                            System.out.println("switch");
                        }
                    });
    Mais ça ne marche pas plus.
    Donc je me demande vraiment si on peut utilisé cette combinaison de touche car si je remplace KeyEvent.VK_TAB par KeyEvent.VK_T alors là je n'ais aucun problème(remarque l'autre methode marchait aussi avec CTRL-T à la place de CTR-TAB).

    La combinaison CTR-TAB est elle interdite par WINDOWS (XP)
    ou java ou ... ?

    merci si quelqu'un sait d'ou peut cela peut venir

    PS:après quelques tests en faite je me suis rendu compte que le CTRL-TAB marchait une fois sur 100(non je n'exagère même pas) alors que le CTRL-T marche très bien. Ca renforce mon idée que l'évenement dois être capté avant par une autre ressource.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    Salut,

    C'est tout simplement windows qui gère l'événement, c'est d'ailleurs étrange que ca marche de temps en temps.
    Il va falloir changer de raccourci.

    a+

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    j'ai trouvé un lien:
    http://bugs.sun.com/bugdatabase/view...bug_id=4736672
    où ils précise:
    The problem is in KeyboardFocusManager.
    The CTRL+TAB and CTRL+SHIFT+TAB are default traversal keys.
    KeyboardFocusManager intercepts and processes the key events for
    CTRL+TAB and for CTRL+SHIFT+TAB.
    Donc apparement le l'évenment serait gerait par le KeyboardFocusManager. En regardant le code j'ai trouvé:
    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
     
       /**
         * The default strokes for initializing the default focus traversal keys.
         */
        private static final AWTKeyStroke[][] defaultFocusTraversalKeyStrokes = {
            {
                AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0, false),
                AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK, false),
            },
            {
                AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK, false),
                AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 
                                             InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK | InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK,
                                             false),
            },
            {},
            {},
          };
    un tableau qui est utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public KeyboardFocusManager() {
            for (int i = 0; i < TRAVERSAL_KEY_LENGTH; i++) {
                Set work_set = new HashSet();
                for (int j = 0; j < defaultFocusTraversalKeyStrokes[i].length; j++) {
                    work_set.add(defaultFocusTraversalKeyStrokes[i][j]);
                }
                defaultFocusTraversalKeys[i] = (work_set.isEmpty())
                    ? Collections.EMPTY_SET
                    : Collections.unmodifiableSet(work_set);
            }
            initPeer();
        }
    donc là en farfouillant, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setFocusTraversalKeysEnabled(false);
    que j'ai appliqué sur ma JFrame et ça marche!!!
    Donc apparement c'est bien Java qui "bloquait" la conbinaison CTRL-TAB
    Seulement je me demande si je ne vais pas me retrouvé avec quelques problèmes lié à cette desactivation. En effet je suppose que le comportement par default du KeyboardFocusManager n'est pas là rien que pour me faire chier

Discussions similaires

  1. Changer un TAB pour un Enter sur un checkbox
    Par bobino75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/06/2012, 22h52
  2. Maintenir la touche Ctrl enfoncée,pour selectionner plusieurs options
    Par sajodia dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2010, 11h42
  3. [Toutes versions] Changer la valeur d'une touche du clavier . pour ,
    Par possible924 dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/08/2010, 11h31
  4. Réponses: 2
    Dernier message: 28/11/2009, 17h27
  5. Comment inhiber la combinaison de touche CTRL+TAB ?
    Par jddev dans le forum Langage
    Réponses: 8
    Dernier message: 18/08/2005, 13h12

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