这个是一个简单的练习程序,窗口上有个小字母会根据键盘输入的上下左右移动。
然而我发现移动的同时,原先的字母没有被擦去?
网上说paint方法需要调用父方法才不会这样,可是我已经调用了啊?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class KeyEventDemo extends JFrame
{
private KeypboardPanel keyboardPanel=new KeypboardPanel();
public KeyEventDemo()
{
add(keyboardPanel);
keyboardPanel.setFocusable(true);
}
public static void main(String[] args)
{
JFrame frame=new KeyEventDemo();
frame.setTitle("KeyEventDemo");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
static class KeypboardPanel extends JPanel
{
private int x=100,y=100;
private char keyChar='A';
public KeypboardPanel()
{
addKeyListener(
new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_DOWN:y+=10;break;
case KeyEvent.VK_UP:y-=10;break;
case KeyEvent.VK_LEFT:x-=10;break;
case KeyEvent.VK_RIGHT:x+=10;break;
default:keyChar=e.getKeyChar();
}
repaint();
}
});
}
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
g.setFont(new Font("TimesRoman",Font.PLAIN,24));
g.drawString(String.valueOf(keyChar),x,y);
}
}
}