嗨,任何人都可以指导我如何在屏幕上移动物体。试过了 但它不起作用。我的代码在屏幕上绘制了100个椭圆,我需要什么才能让这些椭圆形移动。
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class DropGui extends JFrame {
Random rand = new Random();
int xpos,ypos,xvel,yvel,size;
public DropGui()
{
setTitle("Testing Moving Objects");
setSize(900,600);
setLocation(200,80);
getContentPane().setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
// assign random values to xpos,ypos,size variables
xpos = rand.nextInt(900 - 0 + 1) + 0;
ypos = rand.nextInt(900 - 0 + 1) + 0;
size = rand.nextInt(30 - 5 + 1) + 5;
}
public void paint(Graphics g)
{
super.paint(g);
// draws about a 100 ovals to the screen
for(int i = 0 ; i < 100 ; i++)
{
g.fillOval(xpos,ypos,size,size);
xpos = rand.nextInt(900 - 0 + 1) + 0;
ypos = rand.nextInt(900 - 0 + 1) + 0;
size = rand.nextInt(30 - 5 + 1) + 5;
}
}
}
答案 0 :(得分:1)
不要覆盖paint()。
通过覆盖JPanel(或JComponent)的paintComponent()
方法完成自定义绘制,然后将面板添加到框架中。有关更多信息和示例,请参阅Custom Painting上Swing教程中的部分。
此外,您不应该在绘画方法中生成随机对象。您无法控制何时调用绘制方法。相反,您应该创建一个要绘制的对象列表,然后绘制方法将遍历此列表以绘制所有对象。有关如何实现此功能的实例,请参阅Custom Painting Approaches中的DrawOnComponent
示例。
最后,如果你想要动画,那么你应该使用Swing Timer来安排动画。当Timer触发时,您遍历List并更改List中每个对象的位置。然后在面板上调用repaint()
,以便重新绘制对象。