我在一个JFrame里面重画了一个圆,让它向下移动,可是显示出来的效果是向下增长的一条圆形粗线,如果把JFrame换成Frame就正常了,是一个向下移动的圆。
请问,就用JFrame,改一改能不能也向用Frame的效果一样,让一个圆向下移动。我的代码:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;public class TankClient extends JFrame{ int x=50,y=50;
public void paint(Graphics g) {   // 画一个坦克
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 30, 30);
g.setColor(c);

y += 5;
}

public void lauchFrame()  //打开一个窗口
{
this.setLocation(200, 50);
this.setSize(800, 600);
this.setTitle("TankWar");
this.setResizable(false);
this.setBackground(Color.GREEN);
this.setVisible(true);

new Thread(new PaintThread()).start();
}

private class PaintThread implements Runnable //让坦克动起来(内部类)
{ public void run() 
{
while (true) 
{
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


}

}

public static void main(String[] args) {   // 程序入口
TankClient tc = new TankClient();
tc.lauchFrame();
}

}

解决方案 »

  1.   

    呵呵看来阁下也是看了马老师的视频这个问题我也有研究过,我试过在paint方法中加入super.paint(),public void paint(Graphics g) {  // 画一个坦克
    super.paint(g);
    Color c = g.getColor();
    g.setColor(Color.RED);
    g.fillOval(x, y, 30, 30);
    g.setColor(c);y += 5;
    } 可以解决你的问题,不过如果把sleep时间缩短,就会出现闪烁问题,
    这好像是跟Frame和JFrame窗口结构不同有关,具体的还在研究中。。
      

  2.   

    一般情况下swing和awt不会同时用!swing里面确实有一些让人觉得怪怪的东西!我也遇到过一些!