※ ChatGPTを利用し、要約された質問です(原文:javaのrepaint()について)
Javaのrepaint()について
このQ&Aのポイント
Java初心者の方がrepaint()メソッドを使用してアニメーションを実装している際に、描画した残像が残ってしまう問題が発生しています。
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()の位置を変えてみたり
したら、今度はボックスが動かなくなってしまい、訳が分からなくなって来ました・・・何故
上手くいかないんでしょうか?
理想的な動作としては、押したキーに対応した動作をし、残像も残らないようにしたいです。
ご回答よろしくお願いします。
お礼
無事に上手く行きました! ありがとうございます。