package test;import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.JFrame;
import javax.swing.JPanel;public class test2 extends JFrame{ public static void main(String[] args) {
test2 test2=new test2();
}

//构造方法
public test2(){
MyPanel mp=new MyPanel();
//加入到JFrame  实现监听
this.add(mp);

this.addKeyListener(mp);

this.setSize(400,300);
this.setVisible(true);
this.setLocation(300,200);
}

}//定义一个自己的面板
class MyPanel extends JPanel implements KeyListener{

int x=10;
int y=10;

public void paint (Graphics graphics){
super.paint(graphics);
graphics.fillOval(x, y, 10, 10);
} //键被按下
public void keyTyped(KeyEvent e) {
// System.out.println("被按下"+e.getKeyChar());
if(e.getKeyChar()==KeyEvent.VK_DOWN){
y++;
}else if(e.getKeyCode()==KeyEvent.VK_UP){
y--;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x--;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
//调用repaint 函数,重绘界面
repaint();
} //键被释放
public void keyPressed(KeyEvent e) {

} //键的一个值被输出
public void keyReleased(KeyEvent e) {

}
}

解决方案 »

  1.   

    package test;import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;import javax.swing.JFrame;
    import javax.swing.JPanel;public class test2 extends JFrame { public static void main(String[] args) {
    test2 test2 = new test2();
    } // 构造方法
    public test2() {
    MyPanel mp = new MyPanel();
    // 加入到JFrame 实现监听
    this.add(mp); this.addKeyListener(mp);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(400, 300);
    this.setVisible(true);
    this.setLocation(300, 200);
    }}// 定义一个自己的面板
    class MyPanel extends JPanel implements KeyListener { int x = 10;
    int y = 10; public void paint(Graphics graphics) {
    super.paint(graphics);
    graphics.fillOval(x, y, 10, 10);
    } // 键被按下
    public void keyTyped(KeyEvent e) {
    System.out.println("被按下" + e.getKeyChar());
    } // 键被释放
    public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_DOWN) {
    y++;
    } else if (e.getKeyCode() == KeyEvent.VK_UP) {
    y--;
    } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
    x--;
    } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
    x++;
    }
    repaint();
    } // 键的一个值被输出
    public void keyReleased(KeyEvent e) { }
    }
    keyTyped 在文档上写的是 Unicode 字符时产生的事件,我的理解应该是可打印字符才能产生这个事件。方向键属于不可打印字符,所以根本不产生 keyTyped 事件。
      

  2.   

    忘记看你的注释,pressed 是按下,release 是松开,松开以后如果是可打印字符才会产生 typed 事件。