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 :
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 :
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(); } }
[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
Partager