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 :

[JOGL] KeyListener et GLCanvas


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut [JOGL] KeyListener et GLCanvas
    Bonjour

    J'utilise JOGL dans mon application. Je voudrais implémenter un KeyListener pour manipuler au clavier ma visualisation.
    Voici succinctement le code de ma classe pour la visualisation:
    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
    37
    38
    39
    40
     
    public class NetworkRenderer implements GLEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener {
     
        public void init(GLAutoDrawable arg0) {
            this.gl = arg0.getGL();
            gl.glShadeModel(GL.GL_SMOOTH); // Enable Smooth Shading
            gl.glClearColor(1f, 1f, 1f, 1f);
            gl.glClearDepth(1.0f);
            arg0.addMouseListener(this);
            arg0.addMouseMotionListener(this);
            arg0.addMouseWheelListener(this);
            arg0.addKeyListener(this);
        }
     
        public void display(GLAutoDrawable arg0) {
            this.gl = arg0.getGL();
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
     
            if (this.point != null) {
                pickPoint(gl);
            }
     
            drawWorld(gl, GL.GL_RENDER);
     
            gl.glFlush();
        }
     
        public void keyTyped(KeyEvent arg0) {
            System.out.println(arg0);
        }
     
        public void keyPressed(KeyEvent arg0) {
            System.out.println(arg0);
        }
     
        public void keyReleased(KeyEvent arg0) {
            System.out.println(arg0);
        }
     
    }
    Et voici comment je construis cet élément dans ma fenêtre principale:
    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
     
        private void changeGLJPanel(CompleteGraph cg) {
            Date start = new Date();
            this.gljPanel.removeGLEventListener(this.glel);
            this.mainPanel.remove(0);
            this.gljPanel = null;
            this.glel = null;
            this.jScrollPane = null;
            System.gc();
            this.gljPanel = new GLJPanel();
            animator = new Animator(gljPanel);
            glel = new NetworkRenderer(cg, animator, this);
            gljPanel.addGLEventListener(glel);
            gljPanel.setFocusable(true);
            /*KeyListener kl = (KeyListener)glel;
            gljPanel.addKeyListener(kl);*/
            //this.jScrollPane = new JScrollPane(this.gljPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            //this.mainPanel.add(this.jScrollPane, BorderLayout.CENTER);
            this.mainPanel.add(this.gljPanel, BorderLayout.CENTER);
            this.mainPanel.updateUI();
            Date end = new Date();
            long time = end.getTime()-start.getTime();
            System.out.println("Displaying time: "+time+" ms");
        }
    Le problème est que rien ne se passe lorsque je tape sur le clavier.
    J'ai manqué quelque chose ? Je précise que j'ai implémenter dans ma classe NetworkRenderer mes listeners avec la souris et tout fonctionne. J'ai choisi de ne pas les afficher ici.
    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut

    Ok, j'ai trouvé, il fallait demander poliment le focus:
    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
        private void changeGLJPanel(CompleteGraph cg) {
            Date start = new Date();
            this.gljPanel.removeGLEventListener(this.glel);
            this.mainPanel.remove(0);
            this.gljPanel = null;
            this.glel = null;
            this.jScrollPane = null;
            System.gc();
            this.gljPanel = new GLJPanel();
            animator = new Animator(gljPanel);
            glel = new NetworkRenderer(cg, animator, this);
            gljPanel.addGLEventListener(glel);
            gljPanel.setFocusable(true);
            /*KeyListener kl = (KeyListener)glel;
            gljPanel.addKeyListener(kl);*/
            //this.jScrollPane = new JScrollPane(this.gljPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            //this.mainPanel.add(this.jScrollPane, BorderLayout.CENTER);
            this.mainPanel.add(this.gljPanel, BorderLayout.CENTER);
            this.mainPanel.updateUI();
            this.gljPanel.requestFocusInWindow();
            Date end = new Date();
            long time = end.getTime()-start.getTime();
            System.out.println("Displaying time: "+time+" ms");
        }
    Et le tour est joué.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut MERCIIIIIII
    merci GLdavid
    j'ai passé 2heure a chercher la source du probleme :-/
    une autre fois merciiiiii

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JOGL] gljpanel vs glcanvas
    Par gorgonite dans le forum 3D
    Réponses: 1
    Dernier message: 03/09/2015, 16h17
  2. [Jogl] GLCanvas.init non appelé
    Par dabeuliou dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/05/2007, 12h42
  3. prb applet gestion de KeyListener
    Par kikoufr dans le forum Applets
    Réponses: 3
    Dernier message: 07/11/2004, 12h11
  4. [JWindow + KeyListener] Impossible d'avoir un KeyEvent
    Par Pascmar dans le forum Agents de placement/Fenêtres
    Réponses: 14
    Dernier message: 19/07/2004, 17h35
  5. [Debutant Java JOGL] problème glVertexPointer()
    Par Stef784ever dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/04/2004, 17h43

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