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 :

Evénements claviers AWT exploitables?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut Evénements claviers AWT exploitables?
    Bonjour,

    Nous travaillons actuellement sur un projet de cours reposant sur java3d (ce n'est pas un choix technique, mais une contrainte ). Nous avons besoin d'implémenter une caméra type immersion avec suivi de terrain. Pour cela, nous devons savoir quand une touche est enfoncée et quand elle est relâchée pour gérer notre caméra.

    Nous récupérons donc les événements claviers AWT via Java3d. Sous windows et sous linux, nous obtenons un comportement différent pour les KeyReleased... Je me dis, ça doit être une boulette dans java3d, alors j'écris le petit programme suivant :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    package test;
     
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.JFrame;
     
    public class Evenement extends JFrame implements KeyListener {
     
    	public Evenement(){
    		super("une fenetre");
    		this.addKeyListener(this);
    		this.setSize(400,400);
    		this.setVisible(true);
    	}
     
     
    	public void keyPressed(KeyEvent e) {
    		System.out.println("PRESSED");
    	}
     
    	public void keyReleased(KeyEvent e) {
    		System.out.println("RELEASED");
    	}
     
     
    	public void keyTyped(KeyEvent e) {
    		System.out.println("TYPED");
    	}
     
    	public static void main(String[] args){
    		Evenement frame = new Evenement();
    	}
    }
    En testant sous linux (distrib. Ubuntu) et sous windows XP, j'obtiens deux résultats différents en enfonçant et en relâchant une touche :

    [AWT-LINUX]
    PRESSED
    TYPED
    RELEASED
    [...]
    PRESSED
    TYPED
    RELEASED
    --fin--

    [AWT-WINDOWS]
    PRESSED
    TYPED
    PRESSED
    [...]
    PRESSED
    TYPED
    RELEASED
    --fin--

    Sous windows, c'est exploitable; sous linux, il faut faire du traitement du signal...!

    J'ai trainé un peu sur les forums, dont celui de sun où quelqu'un précise le même problème. La réponse à la question est du style : allez voir la javadoc pour connaitre la différence entre KEY_PRESSED et KEY_TYPED...

    Avez vous déjà rencontré ce problème? Comment l'avez vous résolu? Pourriez vous me donner une piste?

    Merci d'avance pour votre aide

    précision : jre : java-6-sun-1.6.0.13

  2. #2
    Membre Expert
    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
    Par défaut
    Quand j'ai eu ce problème sous linux il s'agissait d'une config d'auto-repeat pour les touches dans KDE quelque part. Bref il fallait enlever l'autorepeat.

  3. #3
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonsoir,

    Merci pour la réponse. On avait enlevé l'auto-repeat "en général", pour tester, et en effet, ça fonctionne... Comment pourrait-il en être autrement

    Seulement, c'est assez limite d'imposer à un utilisateur de désactiver son auto-repeat pour que son programme fonctionne (surtout quand le malheureux a réalisé une installation par défaut d'une distrib. et n'a pas trafiqué les paramètres de son clavier)

    Il n'y aurait pas une solution moins violente que trafiquer les paramètres systèmes d'un utilisateur? Du style, configuration de la JVM pour qu'elle ignore les répétitions d'événements clavier?

    Merci

  4. #4
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    Ce problème n'est toujours pas proprement réglé. J'ai tester avec d'autre compilateur java et d'autre machine virtuelle. Le problème n'est pas limité à une installation particulière de ubuntu. D'autre installation par défaut, du type kubuntu, posent les mêmes problème.

    Il se trouve que le KEY_RELEASE apparait uniquement quand la touche est réellement relâchée avec un GCJ. Si le KEY_RELEASE n'est pas généré QUE dans ce cas là, il ne sert à rien, il duplique le KEY_PRESSED.

    Pensez-vous que cela puisse être un problème avec la JVM 1.5, JVM 1.6 (sun et openjdk packée pour ubuntu)? Ou un problème de configuration (fine) d'ubuntu? Ce serait quand même étonnant (voir scandaleux) qu'il y ait de tel bugs...

    (Il est hors de question de considérer qu'il faut taper 30 fois sur suppression pour se déplacer de trente caractères dans ce texte par exemple...)

Discussions similaires

  1. Evènement clavier : ne fonctionne pas
    Par casafa dans le forum wxWidgets
    Réponses: 8
    Dernier message: 30/06/2008, 23h29
  2. Message système - Evénement clavier
    Par TOTO32 dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2007, 17h15
  3. [FORMS 6] Evènement clavier
    Par Yoh dans le forum Forms
    Réponses: 12
    Dernier message: 26/07/2006, 18h29
  4. Evénements clavier et souris !
    Par Franck.H dans le forum SDL
    Réponses: 7
    Dernier message: 19/07/2006, 21h11
  5. [Avancé][keyboard] evènements clavier dans le système
    Par thecaptain dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 25/10/2005, 01h35

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