# netbeans opengl keyPressed(KeyEvent evt) benutzen



## JavaKing (26. Aug 2008)

Hallo,

ich möchte in meinem Opengl Projekt eine einfache Key Steuerung einbauen. z.b. um durch die Szene zu gehen.

Ich habe eine GUI Form :


```
public class GUI extends javax.swing.JFrame {
 public GUI() {
    canvas.addKeyListener(projekt);
}
}
```

Dann eine Klasse:



```
public class Projekt implements  KeyListener,.....{ }
```

Und in dieser Klasse die Methoden:


```
public void keyTyped(KeyEvent evt) {
        System.out.println("test"); }
float y=-2;
  public void keyPressed(KeyEvent evt) {
      System.out.println("test");
      if (evt.getKeyCode() == KeyEvent.VK_E)
      		//exit(0); 
      
      if (evt.getKeyCode() == KeyEvent.VK_F) {
           // Reaktion auf dieses Ereignis  
           betrachterX_Position -= 1; // Kamera nach links verschieben
          y=y+1;
          System.out.println("Lookat "+y);
         }
       if (evt.getKeyCode() == KeyEvent.VK_DOWN) {
           // Reaktion auf dieses Ereignis  
           betrachterX_Position += 1; // Kamera nach rechts verschieben       
         }
   
  }

  public void keyReleased(KeyEvent evt) {
      System.out.println("test");
  }
```

Warum zum Geier reagiert meine Anwendung nicht auf die KeyEvents ?


----------



## lhein (26. Aug 2008)

hat der Canvas den Focus? sieht so aus als ob der Key-Event von einer anderen Stelle consumed wird.

lhein


----------



## JavaKing (26. Aug 2008)

Ja hat den Focus.

```
canvas.requestFocusInWindow();          // Focus für Tastatur in Canvas transferieren
```

Hier mal die ganze Klasse:

```
public class GUI extends javax.swing.JFrame {
    
    //Null initalisieren
    Projekt projekt = null;
    GLCanvas canvas = null;
    Animator animator = null;
 
    /** Creates new form GUI */
    public GUI() {
      initComponents();
      canvas = new GLCanvas();                // Canvas instanzieren
      projekt = new Projekt(this);
      canvas.addMouseMotionListener(projekt);
      canvas.addGLEventListener(projekt);
      canvas.addMouseListener(projekt);
      canvas.addKeyListener(projekt);
      canvas.setSize(640,480);
      canvas.requestFocusInWindow();          // Focus für Tastatur in Canvas transferieren
      getContentPane().add(canvas);           // Canvas der Oberfläche hinzufügen
      animator = new Animator(canvas);
      animator.start();                       // OpenGL-Animation starten
      pack();
    }
```


----------



## lhein (26. Aug 2008)

requestFocus tät ich zu letzt aufrufen. Ausserdem, wie der Name schon vermuten lässt, muss der Focus danach nicht unbedingt auf dem Canvas liegen. Er fragt nur nach dem Focus, ob er ihn bekommt steht auf einem anderen Blatt Papier.
Funktioniert der MouseListener im Canvas?


----------



## JavaKing (26. Aug 2008)

Ahja ok, wusste ich nicht. Ich dachte er bekommt ihn dadurch. Aber stimmt schon request (nachfragen)

Ich habe jetzt ein wenig hin und her gespielt und tatsächlich wenn ich diese 2 Zeilen vertausche, klappt es.


```
getContentPane().add(canvas);           // Canvas der Oberfläche hinzufügen 
               canvas.requestFocusInWindow();          // Focus für Tastatur in Canvas transferieren
```

Hätte man auch alleine darauf kommen können. :-(

Den MouseListener möchte ich dann für Picking verwenden, soweit bin ich aber noch nicht. Ich hoffe das es da keine Probleme gibt.
Danke


----------

