【发布时间】:2014-12-14 22:48:33
【问题描述】:
好的,所以程序的目的只是绘制和椭圆形,然后在屏幕上移动它。代码在 Eclipse 上编译没有错误,但是在运行时,没有绘制或在屏幕上移动椭圆。我一直在研究,似乎线程必须做很多事情,但是这个简单的程序需要一个吗?我显然是使用 Swing 进行 GUI 编程的新手,因此我将不胜感激解释或链接到一个有关线程或此类相关概念的程序的任何添加。
public class Game extends JPanel
{
int x =0;
int y =0;
private void moveBall()
{
x+=1;
y+=1;
}
public void paint (Graphics g)
{
super.paint(g);
g.fillOval(x, y, 30, 30);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Animation");
Game game = new Game();
frame.add(game);
frame.setVisible(true);
frame.setSize(300,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
while (true)
{
game.moveBall();
game.repaint();
}
}
}
【问题讨论】:
-
实际上,可能是,问题很可能是,它移动得太快了,以至于它从未更新到屏幕上......
-
可能是问题所在:您尝试在 while 循环中移动球。要么这会移动得太快,要么它甚至不会出现在框架中,因为框架本身没有被重新绘制。可能不是因为您甚至没有看到椭圆形而没有重新粉刷框架。使用计时器
-
好的,那我该如何降低速度呢?使用线程可以/更容易做到这一点吗?那是 thread.sleep(millisecond param) 的作用吗? @MadProgrammer
-
如何做到这一点? @Quincunx
-
对于
JPanel,public void paint (Graphics g) { super.paint(g);代码应为public void paintComponent(Graphics g) { super.paintComponent(g);..
标签: java multithreading swing animation