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 :

Clavier visuel swing


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Clavier visuel swing
    Bonjour a tous,

    Contrairement au titre je ne réalise pas exactement un clavier visuel mais mon application s'en rapproche drôlement.

    Elle est donc faite en swing, avec netbeans 6.8 et ne me pose qu'un seul problème.

    Son but sera en somme le même que le clavier visuel de Windows mais avec deux différences :
    - Le choix entre des mots et non entre des lettres (ou touches)
    - Des combos à la place des boutons.

    Donc mon programme est pour l'instant très basique je suis en phase de test, mais mon problème se pose dès lors.

    L'interface est bien évidement toujours visible (setAlwaysOnTop(true)), mais je coince au moment de l'action qui est déclencher à la sélection d'un élément dans la combo, et qui est censé copier la sélection dans une autre application (par exemple le bloc note ou le navigateur).

    en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(MonElement);
    tout fonctionne bien mais l'utilité est limité.
    Je voudrais donc savoir comment interagir avec une autre application a la manière du clavier visuel (qui ne prend pas le focus).

    Si quelqu'un a une idée, ou si je me suis mal (ou trop désolé ) exprimé, qu'il n'hésite pas a se manifester.

    Merci et Bonnes fêtes a tous

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Il y'a quelque temps, j'avais fait une application qui permet de controler d'autres application tournant sur une meme machine sous windows. L'application pouvait simuler la pression des touches du clavier ou l'action de la souris sur la fenetre d'une autre application. Le programme etait en c++ sous visual c++, utilisant un hook bas niveau, et qui utilise biensur l'API windows.

    A mon avis, un tel programme dépend fortement de la plateforme, alors que java est sensé être indépendant de tout plateforme. En java pur, je ne pense pas qu'une tel solution existe, à moins d'utiliser JNI afin d'utiliser des librairies spécifiques pour les plateformes d'exécution de ton application.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Et par exécution d'un copier/coller?

    J'explique en reprenant l'exemple du clavier visuel :

    je clic sur la lettre A.
    -> mon application effectue un copier de la lettre 'A' et le colle ou se trouve mon curseur.

    Vous pensez que de cette manière cela reste très compliqué ?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par darrylsite Voir le message
    A mon avis, un tel programme dépend fortement de la plateforme, alors que java est sensé être indépendant de tout plateforme. En java pur, je ne pense pas qu'une tel solution existe, à moins d'utiliser JNI afin d'utiliser des librairies spécifiques pour les plateformes d'exécution de ton application.
    C'est tout à fait possible en Java ! En grande partie en tout cas...

    La classe Robot permet de faire cela, en s'intégrant sur le bureau pour faire des screenshots ou simulé le clavier/souris.

    Du coup on peut facilement envoyer une touche sur l'application qui a la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Robot robot = new Robot();
    robot.keyPress(keycode);
    robot.keyRelease(keycode);


    Il y a juste quelques problèmes assez simple à gérer :
    • Le premier problème vient du focus : lorsque tu cliques sur un bouton de ton clavier, ta frame récupère le focus. Du coup c'est elle qui récupère les évènement clavier que tu génères via le Robot, et non pas l'application sur laquelle tu étais...

      Le plus simple pour éviter cela consiste à interdire à ta frame d'avoir le focus :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setFocusableWindowState(false);
    • Il faut bien prendre en compte qu'on envoi des "keycodes". On peut utiliser pour cela les constante VK_* défini dans KeyEvent ou utilise KeyStroke.getKeyStroke() pour le récupérer depuis une chaine. Il faut bien prendre en compte cela surtout si tu veux envoyer des mots, car il faudra alors les décomposer en une séquence de plusieurs touches.

    • De même, il faut bien penser que tu envois un "keycode" et non pas un caractère. Ainsi si tu envois VK_1 par exemple, cela t'affichera "&" et non pas "1" à moins de gérer le CAPSLOCK ou le SHIFT. De même cela peut varier selon la configuration du clavier (QWERTY, AZERTY, etc.).

    • Le capslock est justement problématique, puisqu'il peut modifier les touches saisie. On peut récupérer son état via Toolkit.getLockingKeyState(), mais il n'est pas toujours juste. En particulier lorsque l'application n'a pas le focus et qu'elle ne reçoit donc aucune saisie clavier...

      C'est le point problématique qui peut nécessiter l'utilisation de code natif spécifique à l'OS...


    Enfin tu peux bien sûr utiliser le presse-papier, en y mettant une chaine de caractères puis en envoyant un Ctrl+V...

    a++

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,

    C'est tout à fait possible en Java ! En grande partie en tout cas...

    La classe Robot permet de faire cela, en s'intégrant sur le bureau pour faire des screenshots ou simulé le clavier/souris.

    je vais voir ça.

Discussions similaires

  1. Clavier visuel + retour à la ligne sous ie
    Par keul85 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/07/2007, 12h32
  2. Comment faire un clavier visuel?
    Par Ludo_360 dans le forum Delphi
    Réponses: 12
    Dernier message: 02/05/2007, 15h03
  3. Comment afficher le clavier visuel ?
    Par crossrobotik dans le forum MFC
    Réponses: 1
    Dernier message: 30/01/2007, 14h38
  4. Réponses: 2
    Dernier message: 10/07/2006, 18h19
  5. Clavier visuel pour linux ?
    Par Madmac dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/06/2005, 18h51

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