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 :

Controle du Focus


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Controle du Focus
    Bonjour,

    Je dévéloppe une application qui ne doit fonctionner qu'en mode clavier. Pour cela je veux rendre l'interface non interactive avec l'utilisateur si celui-ci prend sa sourie en main !

    Je voudrais savoir si il y avait un moyen pour qu'aucun composant de mon interface ne puisse prendre de focus... pour l'instant j'ai mis le focus sur la JFrame qui récupère les touches tapées par l'utilisateur et n'utilise que des composant en "lecteure seule" (JLabel) mais le résultat n'est pas satisfaisant je fini à un moment ou à un autre par predre le focus sur ma fenêtre dès que je rajoute des composants comme JTable qui de base gère la sourie.

    Quelqu'un aurait une idée ?

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui :

    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
     
    public class Pwned extends JComponent {
      public void setVisible(boolean visible) {
        if (visible) {
          setFocusTraversalKeysEnabled(false);
          addMouseListener(new MouseAdapter() { });
          addMouseMotionListener(new MouseMotionAdapter() { });
          addKeyListener(new MouseAdapter() { });
          super.setVisible(true);
          requestFocusInWindow();
        } else {
          // undo
        }
      }
    }
    Et dans ta JFrame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setGlassPane(new Pwned());
    getGlassPane().setVisible(true);
    Avec ca tu bloques tous les evenements clavier et souris. C'est peut etre trop pour ton cas, mais tu peux modifier le code facilement pour l'adapter.
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ah merci pour l'astuce, ca me fait exactement penser au composant d'attente infinie ... que j'ai cru apercevoir quelque part

    Je vais essayer ça ... je vais voir si je n'ai pas d'effets de bord quant à la récupération de certains évènements mais appriorie ca me parrait une excellente idée ...

    Malgrès tout j'aurais pensé qu'il était possible de désactiver la gestion du focus sur les composants du style.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    component.setFocusable(false)
    Mais en utilisant celà j'ai des problèmes ... je vais continuer à appronfondir le sujet

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Tu ne peux pas dire que tu veux désactiver le focus pour empêcher l'utilisation de la souris car le focus est nécessaire également pour le clavier. En fait tu n'utilises pas le bon terme.

    Focus est le fait d'entrer (focus in) ou de sortir (focus out) d'un composant, que ça soit de façon programmatique, par la souris ou par le clavier.

    La solution de Gfx est idéale dans ton cas.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu PEUX interdire le focus sur chaque composant mais c'est horriblement ennuyant a faire. Le glass pane te permet de tout bloquer d'un coup.
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Ca marche bien

Discussions similaires

  1. control du focus sur un input text
    Par thor76160 dans le forum jQuery
    Réponses: 0
    Dernier message: 30/11/2011, 16h28
  2. Réponses: 1
    Dernier message: 25/06/2010, 07h38
  3. Savoir si un controle à le focus?
    Par Anonymouse dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/05/2008, 16h46
  4. [MFC] tab control et focus
    Par Grey dans le forum MFC
    Réponses: 2
    Dernier message: 14/11/2005, 13h30
  5. [VB.NET] Comment récupérer le nom d'un control avec le focus
    Par jayce007 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/01/2005, 00h53

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