관리 메뉴

지구별에서 - Things Old and New

Jogl에서 KeyEvent 쓰는 법 본문

IT/JOGL(Java OpenGL)

Jogl에서 KeyEvent 쓰는 법

샛솔 2005. 12. 6. 06:14

Jogl에서 KeyEvent 쓰는 법

Jogl에 KeyEvent를 쓰는 법은 바로 앞 강좌 MouseEvent 를 쓰는 것과 별반 다를 것이 없다.  여기서는 Numeric Pad 의 방향 키를 누르면 그 방향으로 작은 네모꼴이 움직이는 Applet을 만들어 본다. 사실 모든 코드가 앞강좌와 거의 같으므로 설명이 별로 필요 없다.  21째 줄 canvas.addKeyListener(listener);   만 바뀌었다.     코드만 자세히 검토해 보기 바란다.

  1. import java.applet.Applet;
  2. import java.awt.*;
  3. import net.java.games.jogl.*;
  4. @SuppressWarnings("serial")
  5. public class JoglApplet extends Applet {
  6.         static int WIDTH = 500,  HEIGHT = 300 ;
  7.         GLCanvas canvas;
  8.         JoglDisplay listener ;
  9.                 
  10.           public void init() {
  11. //          canvas.requestFocusInWindow();
  12.             GLCapabilities glc = new GLCapabilities();
  13.             canvas = GLDrawableFactory.getFactory().createGLCanvas(glc);
  14.             add(canvas, BorderLayout.CENTER);
  15.             listener = new JoglDisplay();
  16.                 canvas.addGLEventListener(listener);
  17.                 canvas.addKeyListener(listener);        
  18.                 listener.glc = canvas;
  19.                 setSize(WIDTH, HEIGHT);
  20.                 canvas.setSize(WIDTH, HEIGHT);
  21.                 }
  22.         }

 이 부분은 앞강좌의 Applet 클래스 정의와 같다.

아래에 GLEventListener의 자식클래스 JoglDisplay를 정의한다. 이때  MouseListener 대신 KeyListener를 임프리먼트한다. (6째줄)

47~59째 줄까지가 이 KeyListener 의 메쏘드들을 정의한 것이다.  

  1. import java.awt.event.*;
  2. import net.java.games.jogl.*;
  3. public class JoglDisplay
  4. implements GLEventListener, KeyListener
  5. {
  6. int xPosition = 25;
  7. int yPosition = 25;
  8. GLCanvas glc;
  9. public void init(GLDrawable drawable) {
  10. GL gl = drawable.getGL();
  11. GLU glu = drawable.getGLU();
  12. gl.glClearColor(0.0f, 0.0f,0.0f, 0.0f);
  13. gl.glViewport(0, 0, 50, 50);
  14. gl.glMatrixMode(GL.GL_PROJECTION);
  15. gl.glLoadIdentity();
  16. glu.gluOrtho2D(0.0, 50.0, 0.0, 50.0);
  17. }
  18. public void display(GLDrawable drawable) {
  19. GL gl = drawable.getGL();
  20. gl.glClear(GL.GL_COLOR_BUFFER_BIT);
  21. gl.glPointSize(6.0f);
  22. gl.glColor3f(1, 1, 1);
  23. gl.glBegin(GL.GL_POINTS);
  24. gl.glVertex2i(xPosition, yPosition);
  25. gl.glEnd();
  26. }
  27. public void reshape(
  28. GLDrawable drawable,
  29. int x,
  30. int y,
  31. int width,
  32. int height
  33. ) {}
  34. public void displayChanged(
  35. GLDrawable drawable,
  36. boolean modeChanged,
  37. boolean deviceChanged
  38. ) {}
  39. public void keyPressed(KeyEvent e) {}
  40. public void keyReleased(KeyEvent e) {}
  41. public void keyTyped(KeyEvent e) {
  42. if (e.getKeyChar() == KeyEvent.VK_8 || e.getKeyChar() == KeyEvent.VK_KP_UP )
  43. yPosition += 1;
  44. else if (e.getKeyChar() == KeyEvent.VK_2 || e.getKeyChar() == KeyEvent.VK_KP_DOWN)
  45. yPosition -= 1;
  46. else if (e.getKeyChar() == KeyEvent.VK_4 || e.getKeyChar() == KeyEvent.VK_KP_LEFT )
  47. xPosition -= 1;
  48. else if (e.getKeyChar() == KeyEvent.VK_6 || e.getKeyChar() == KeyEvent.VK_KP_RIGHT )
  49. xPosition += 1;
  50. glc.repaint();
  51. }
  52. }

 이 코드를 컴파일하고 실행시켜 보기 바란다.  여기를 열면 그 결과를 볼 수 있다.  먼저 검은 화면부분에 마우스를 갖다 놓고한번 클릭하여 Focus를 얻은 다음뉴메릭 패드에서 화살표를 눌러 네모가 화살표방향으로 움직이는 것을 확인하기 바란다.NumLock을 한 상태에서 화살표를 클릭해야 한다.위 코드에는  Numeric pad를 해제한 경우에도 작동하도록 프로그램을 작성했지만   NumLock을 해제하면 작동하지 않는다.  

'IT > JOGL(Java OpenGL)' 카테고리의 다른 글

왜 도둑질이 나쁜가?  (4) 2005.12.27
인터넷은 쓰레기인가?  (2) 2005.12.25
Jogl에서 MouseEvent 쓰는 법  (0) 2005.12.05
Jogl을 JApplet 에 담는 법  (0) 2005.12.04
Jogl을 Applet에 담는 법  (0) 2005.12.03
Swing 을 사용하는 Jogl 코드의 해설  (0) 2005.12.02
Jogl 과 Swing  (0) 2005.12.01
JOGL  (0) 2005.12.01
Comments