这是我做的关于键盘事件的一个简单的java程序,就是由两个小方块,按上下左右键第一个小方块可以移动,按WSAD四个键让第二个小方块上下左右的移动。可是运行的时候只是两个静止的小正方形,按键盘没有任何反应,希望大家能给点意见……
谢谢了……
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class KeyEventDemo extends JApplet implements KeyListener{
   final int size = 20;
   int x1,x2,y1,y2;
   int x11,y11,x22,y22;
   Color fillColor=Color.red;
   
 public void init(){
    setBackground(Color.yellow);
    Dimension d =this.getSize();
    x1=0;y1=d.height/2-size/2;
    x11=x1;y11=y1;
    x2=d.width/2-size/2;y2=0;
    x22=x2;y22=y2;
    this.setFocusable(true);
    this.setFocusable(false);
    }
 
 public void paint(Graphics g)
   {
    g.setColor(Color.cyan);
    g.fillRect(x11,y11,size,size);
    g.fillRect(x22,y22,size,size);
    g.setColor(fillColor);
    g.fillRect(x1,y1,size,size);
    g.fillRect(x2,y2,size,size);   }/*------------第一个小正方形的移动----------------*/   
 public void keyPressed(KeyEvent e)
   {    if(e.getKeyCode()==KeyEvent.VK_UP)
     {
      y11=y1;x11=x1;
      y1=y1-8;
      if(y1<=3)y1=3;
      repaint();     }    else if(e.getKeyCode()==KeyEvent.VK_DOWN)
      {
       y11=y1;x11=x1;
       y1=y1+8;
       if(y1>=getSize().height-3-size)y1=getSize().height-3-size;
       repaint();
      }
 
    else  if(e.getKeyCode()==KeyEvent.VK_LEFT)
     {
      x11=x1;y11=y1;
      x1=x1-8;
      if(x1<=3) x1=3;
      repaint();     }    else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
      {
       x11=x1;y11=y1;
       x1=x1+8;
       if(x1>=getSize().height-3-size)x1=getSize().height-3-size;
       repaint();
      }   }
/*------------第二个小正方形的移动----------------*/
 public void keyTyped(KeyEvent e)
   {
    char ch=e.getKeyChar();
    if(ch=='W'||ch=='w')
      {
       y22=y2;x22=x2;
       y2=y2-8;
       if(y2<=3)y2=3;
       repaint();      }    else if(ch=='S'||ch=='s')
      {
       y22=y2;x22=x2;
       y2=y2+8;
       if(y2>=getSize().height-3-size)y2=getSize().height-3-size;
       repaint();
      }
    
    else if(ch=='A'||ch=='a')
      {
       x22=x2;y22=y2;
       x2=x2-8;
       if(x2<=3) x2=3;
       repaint();      }    else if(ch=='D'||ch=='d')
      {
       x22=x2;y22=y2;
       x2=x2+8;
       if(x2>=getSize().height-3-size)x2=getSize().height-3-size;
       repaint();      }
   } public void keyReleased(KeyEvent e){}}

解决方案 »

  1.   


    public void keyPressed(KeyEvent e) {
    int mes=e.getKeyCode();//接收按键值
    if(KeyEvent.VK_DOWN==mes){
                                    //按向下键要做的事
                                        }
                                    if(KeyEvent.VK_UP==mes){
                                    //按向上键要做的事
                                        }
                                    if(KeyEvent.VK_LEFT==mes){
                                    //按向左要做的事
                                        }
                                    if(KeyEvent.VK_RIGHT==mes){
                                    //按向右键要做的事
                                        }}                                
      

  2.   

    注释掉this.setFocusable(false);  
    加上监听public void init(){
        setBackground(Color.yellow);
        Dimension d =this.getSize();
        x1=0;y1=d.height/2-size/2;
        x11=x1;y11=y1;
        x2=d.width/2-size/2;y2=0;
        x22=x2;y22=y2;
        this.setFocusable(true);
        //this.setFocusable(false);   
        addKeyListener(this);

      

  3.   

    public void init(){
        setBackground(Color.yellow);
        Dimension d =this.getSize();
        x1=0;y1=d.height/2-size/2;
        x11=x1;y11=y1;
        x2=d.width/2-size/2;y2=0;
        x22=x2;y22=y2;
        this.setFocusable(true);
        this.setFocusable(false);
    this.addKeyListener(this);   //Add
    this.setFocusable(true);     //Add
    this.requestFocus();         //Add
        }
      

  4.   

    是没有重画吗?楼主你测试下,repaint语句执行了吗?或者是事实上重画了,但是japplet没有显示?
      

  5.   

    [code=java]
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; public class KeyEventDemo extends JApplet implements KeyListener{ 
     
    final int size = 20; 
      int x1,x2,y1,y2; 
      int x11,y11,x22,y22; 
      Color fillColor=Color.red;
      
      
    public void init(){ 
    this.addKeyListener(this);
        setBackground(Color.yellow); 
        Dimension d =this.getSize(); 
        x1=0;y1=d.height/2-size/2; 
        x11=x1;y11=y1; 
        x2=d.width/2-size/2;y2=0; 
        x22=x2;y22=y2; 
       this.setFocusable(true); 
       // this.setFocusable(false); 
        } public void paint(Graphics g) 
      { 
        g.setColor(Color.cyan); 
        g.fillRect(x11,y11,size,size); 
        g.fillRect(x22,y22,size,size); 
        g.setColor(fillColor); 
        g.fillRect(x1,y1,size,size); 
        g.fillRect(x2,y2,size,size); 
          } 
    /*------------第一个小正方形的移动----------------*/  
    public void keyPressed(KeyEvent e) 
      {     if(e.getKeyCode()==KeyEvent.VK_UP) 
        { 
          
          y11=y1;x11=x1; 
          y1=y1-8; 
          if(y1 <=3)y1=3; 
          repaint();     }     else if(e.getKeyCode()==KeyEvent.VK_DOWN) 
          { 
          y11=y1;x11=x1; 
          y1=y1+8; 
          if(y1>=getSize().height-3-size)y1=getSize().height-3-size; 
          repaint(); 
          }     else  if(e.getKeyCode()==KeyEvent.VK_LEFT) 
        { 
          x11=x1;y11=y1; 
          x1=x1-8; 
          if(x1 <=3) x1=3; 
          repaint();     }     else if(e.getKeyCode()==KeyEvent.VK_RIGHT) 
          { 
          x11=x1;y11=y1; 
          x1=x1+8; 
          if(x1>=getSize().height-3-size)x1=getSize().height-3-size; 
          repaint(); 
          } 
      } 
    /*------------第二个小正方形的移动----------------*/ 
    public void keyTyped(KeyEvent e) 
      { 
        char ch=e.getKeyChar(); 
        if(ch=='W'||ch=='w') 
          { 
          y22=y2;x22=x2; 
          y2=y2-8; 
          if(y2 <=3)y2=3; 
          repaint();       }     else if(ch=='S'||ch=='s') 
          { 
          y22=y2;x22=x2; 
          y2=y2+8; 
          if(y2>=getSize().height-3-size)y2=getSize().height-3-size; 
          repaint(); 
          } 
        
        else if(ch=='A'||ch=='a') 
          { 
          x22=x2;y22=y2; 
          x2=x2-8; 
          if(x2 <=3) x2=3; 
          repaint();       }     else if(ch=='D'||ch=='d') 
          { 
          x22=x2;y22=y2; 
          x2=x2+8; 
          if(x2>=getSize().height-3-size)x2=getSize().height-3-size; 
          repaint();       } 
      } public void keyReleased(KeyEvent e){} } 
    [code]
      

  6.   

    楼主帮你改好咯,关键是你没有对japplet进行监听