javaのrepaint()について
Java初心者です。
現在、アニメーションで少々つまずいています・・・ソースは以下の通りです。
import java.awt.*;
import java.awt.event.*;
public class test04 extends Frame implements KeyListener
{
public int x = 10, y = 10;
public static void main(String[] args)
{
new test04();
}
test04()
{
super("KeyFrameTest"); //フレーム名
setSize(200, 200); //フレームサイズを設定
MyCanvas mc = new MyCanvas();
mc.addKeyListener(this);
add(mc);
setVisible(true); //フレームを表示
addWindowListener(new Close()); //クローズ処理
}
/*** キーが押されているとき ***/
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
switch(key)
{
case 37: //←
x--;
break;
case 38: //↑
y--;
break;
case 39: //→
x++;
break;
case 40: //↓
y++;
break;
}
System.out.println("(" + x + "," + y + ")");
}
/*** キーが離されたとき ***/
public void keyReleased(KeyEvent e)
{
}
/*** キーが押された瞬間 ***/
public void keyTyped(KeyEvent e)
{
}
/*** キャンバス用クラス ***/
class MyCanvas extends Canvas
{
/*** 描画ステータス ***/
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillRect(x, y, 20, 20);
repaint();
}
/*** ペイント処理 ***/ //勝手に点滅するのを回避するため
public void update(Graphics g)
{
paint(g);
}
}
}
/*** クローズクラス ***/
class Close extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
/*** スリープクラス ***/
class Sleep extends Thread
{
public void Sleep(long milli)
{
try
{
Thread.sleep(milli);
}
catch(Exception e)
{
}
}
}
↑のプログラムを実行すると、押したキーに対応する動作はするのですが、
前に描画した残像が残ってしまい、上手くいきません・・・repaint()の位置を変えてみたり
したら、今度はボックスが動かなくなってしまい、訳が分からなくなって来ました・・・何故
上手くいかないんでしょうか?
理想的な動作としては、押したキーに対応した動作をし、残像も残らないようにしたいです。
ご回答よろしくお願いします。
補足
説明不足でした。すみません。 このプログラムではJFrameを継承した、mainを持つクラスと、マウスの入力を受けるためのMouseAdapterを継承したクラスがあります。そして、後者のクラスにmouseClickedメソッドがあり、その中でJFrameのrepaintメソッドを利用したいのです。 オブジェクト指向をまだ勉強し始めたばかりなので、頓珍漢なことを言っているかもしれませんが、よろしくお願いします。