2012-05-15 7 views
1

이 코드에서 KeyListener를 사용하여 위아래로 이동하려면 어떻게해야합니까? 내가 KeyListener를 사용하는 방법을 알고 있지만이 코드에 어디에 넣어 두지는 모르겠다.Java에서 KeyListener를 어떻게 사용합니까?

import java.awt.*; 
    import java.awt.image.*; 
    import java.awt.event.*; 
    import java.awt.geom.*; 

    import javax.swing.*; 


    public class ControlPanel extends JPanel implements Runnable,ActionListener,KeyListener,MouseListener{ 
     private MainPanel main; 
     private final static int maxWidth = 800, maxHeight = 600; //width & height of JPanel 
     private boolean running; //keeps track of state of the program 
     private Thread thread; 
     private Graphics2D graphics; 
     private Image image; //used for double buffering 
     private BufferedImage bgImage; 
     private String s = ""; 
     Font f = new Font("Times New Roman",Font.PLAIN,50); 
     Timer t = new Timer(2000,this); 
     private int typed = 0; 
     private int x = 50,y = 500; 

     public ControlPanel(MainPanel main) { 
      this.setDoubleBuffered(false); //we'll use our own double buffering method 
      this.setBackground(Color.black); 
      this.setPreferredSize(new Dimension(maxWidth, maxHeight)); 
      this.setFocusable(true); 
      this.requestFocus(); 
      this.main = main; 
      addKeyListener(this); 
      addMouseListener(this); 
      t.start(); 
     } 

     public static void main(String[] args) { 
      new MainPanel(); 
     } 

     public void addNotify() { 
      super.addNotify(); 
      startGame(); 
     } 

     public void stopGame() { 
      running = false; 
     } 

     //Creates a thread and starts it 
     public void startGame() { 
      if (thread == null || !running) { 
       thread = new Thread(this); 
      } 
      thread.start(); //calls run() 
     } 

     public void run() { 
      running = true; 

      init(); 
      while (running) { 
       createImage(); //creates image for double buffering 

       ///////////////USE THESE 2 METHODS//////////////////// 
       update(); //use this to change coordinates, update values, etc 


       draw(); //use this to draw to the screen 


       ////////////////////////////////////////////////////// 
       drawImage(); //draws on the JPanel 
      } 

      System.exit(0); 
     } 





     //Use this to create or initialize any variables or objects you have 
     public void init() { 
     } 
     public void initGame(){ 

     } 



     //Use this to update anything you need to update 
     public void update() { 

     } 

     //Use this to draw anything you need to draw 
     public void draw() {   

      graphics.setColor(Color.WHITE); 
      graphics.fillRect(250, 450, 300,100); 

      graphics.setColor(Color.WHITE); 
      graphics.fillRect(250, 320, 300,100); 

      graphics.setColor(Color.GREEN); 
      graphics.setFont(f); 
      graphics.drawString(s, x, y); 
      typed = 0; 

      graphics.setFont(f); 
      graphics.setColor(Color.blue); 
      graphics.drawString("HANGMAN", 270,75); 

      graphics.setFont(f); 
      graphics.setColor(Color.blue); 
      graphics.drawString("PLAY", 330, 390); 

      graphics.setFont(f); 
      graphics.setColor(Color.blue); 
      graphics.drawString("QUIT", 330, 520); 

      graphics.setColor(Color.red); 
      graphics.drawRect(248, 318, 304,104); 




     } 

     //creates an image for double buffering 
     public void createImage() { 
      if (image == null) { 
       image = createImage(maxWidth, maxHeight); 

       if (image == null) { 
        System.out.println("Cannot create buffer"); 
        return; 
       } 
       else 
        graphics = (Graphics2D)image.getGraphics(); //get graphics object from Image 
      } 

      if (bgImage == null) { 
       graphics.setColor(Color.black); 
       graphics.fillRect(0, 0, maxWidth, maxHeight); 
       //System.out.println("No background image"); 
      } 
      else { 
       //draws a background image on the Image 
       graphics.drawImage(bgImage, 0, 0, null); 
      } 
     } 

     //outputs everything to the JPanel 
     public void drawImage() { 
      Graphics g; 
      try { 
       g = this.getGraphics(); //a new image is created for each frame, this gets the graphics for that image so we can draw on it 
       if (g != null && image != null) { 
        g.drawImage(image, 0, 0, null); 
        g.dispose(); //not associated with swing, so we have to free memory ourselves (not done by the JVM) 
       } 
       image = null; 
      }catch(Exception e) {System.out.println("Graphics objects error");} 
     } 


     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 

     } 

     public void keyPressed(KeyEvent e) {  



     } 

     public void keyReleased(KeyEvent e) { 


     } 

     public void keyTyped(KeyEvent e) { 
      typed = 1; 

      s+=Character.toString(e.getKeyChar()); 
      s+=" "; 
      System.out.println(s); 
     } 

     @Override 



     public void mouseClicked(MouseEvent e) { 
      System.out.println(e.getPoint()); 

     } 

     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mousePressed(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 
+0

여기를보세요 : http://stackoverflow.com/questions/3355574/java-swing-keylistener – Rhand

+0

모양과 언급대로 'Swing'에서 [KeyBinding] 튜토리얼 (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)을 살펴보기로하자. KeyListeners는 적절하지 않다. 위아래로 이동 : –

+0

[코드 예제] (http://stackoverflow.com/questions/9727192/java-moving-a-circle-in-a-gui-with-arrow-keys/9727929 # 9727929) –

답변

관련 문제