2013-01-31 112 views
3

我完全不知道如何在applet中使用KeyListener(好的,我有一个好主意)。我知道这与专注于applet有关,但我不知道如何做到这一点。我的程序作为一个应用程序运行良好,但它不会将键盘输入作为一个小程序。如果有人能给我一些帮助,那会很棒。如何在Java applet中使用keyListener

我的代码是:

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

public class Window extends JApplet { 

    static Ship ship; 
    static ColorPanel panel; 
    static boolean up=false, down=false, left=false, right=false; 

      public static class PanelListener implements KeyListener{ 

     public void keyPressed(KeyEvent e){ 
      switch(e.getKeyCode()) { 
        case 38: ship.setMoving(true); down = true;break; 
        case 40: ship.setMoving(true); up = true;break; 
        case 37: ship.setMoving(true); left = true;break; 
        case 39: ship.setMoving(true); right = true;break; 
        case 32: ship.setFiring(true); break; 
        case 49: ship.setSwitching(true); ship.switchOrdinance(49); break; 
        case 50: ship.setSwitching(true); ship.switchOrdinance(50); break; 
        case 51: ship.setSwitching(true); ship.switchOrdinance(51); break; 
        case 52: ship.setSwitching(true); ship.switchOrdinance(52); break; 
        case 83: if(ship.shieldState()){ship.shieldOff();}else{ship.shieldOn();} 
      } 
      ship.setDirection(up,down,left,right); 
      ship.setVelocity(3); 
     } 
     public void keyReleased(KeyEvent e){ 
      switch(e.getKeyCode()) { 
       case 38: ship.setMoving(false); down = false; break; 
       case 40: ship.setMoving(false); up = false; break; 
       case 37: ship.setMoving(false); left = false; break; 
       case 39: ship.setMoving(false); right = false; break; 
       case 32: ship.setFiring(false); break; 
       case 49: ship.setSwitching(false); break; 
       case 50: ship.setSwitching(false); break; 
       case 51: ship.setSwitching(false); break; 
       case 52: ship.setSwitching(false); break; 
       default: ship.setMoving(false); ship.setFiring(false); ship.setSwitching(false); left=false; right=false; up=false; down=false; 
      } 
      ship.setDirection(up,down,left,right); 
      if(!up || !down || !right || !left){ 
       ship.setVelocity(0); 
      } 
     } 
     public void keyTyped(KeyEvent e){ 
     } 
    } 

     public void init(){ 
      Container pane; 
      ship=new Ship(); 
      panel = new ColorPanel(Color.black, 1340, 640); 
      panel.sendShip(ship); 
      pane=getContentPane(); 
      pane.add(panel); 
      addKeyListener(new PanelListener()); 
     } 
} 
+0

http://stackoverflow.com/questions/4241489/focus-for-java-applets – maerics

回答

2

你是正确的,你需要设置它可聚焦在init方法结束

setFocusable(true); 

,如果你不至少做到这一点,你必须点击面板才能获得遇到的密钥。