[英]Drawing a lot of same objects from a class in JFrame
答案是我在问题的底部写的
我想在框架中获得很多“ Ates”对象。 我尝试了很多示例,但始终失败。
在这种情况下,我想看到很多矩形将要离开。 但是,只有一个,并且它的运行速度越来越快...
它不能同时显示多个对象。 你能告诉我是什么问题吗?
我使用以下代码:
public class GamePanel extends JPanel
{
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLACK);
for(Ates a1 : StartGame.alist) // alist is an arraylist for Ates class objects
{
g.fillRect(a1.getX(), a1.getY(), 20, 20);
}
...
创建示例:
public void sentAtes()
{
r = rand.nextInt(471)+60;
Ates a = new Ates(r);
alist.add(a);
}
雅典班:
public Ates(int a)
{
x = 700;
y = a;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public void setX( int a )
{
x = a;
}
public void setY( int a )
{
y = a;
}
StartGame类:
public class StartGame extends JFrame implements KeyListener, ActionListener
{
protected static ArrayList<Ates> alist = new ArrayList<Ates>();
public static int cen = 0;
...
public StartGame()
{
jp = new GamePanel();
add(jp);
...
int delay = 10;
ActionListener taskPerformed = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
cen++;
if(cen > 50)
{
cen = 0;
sentAtes();
}
for(Ates a1 : alist)
{
a1.setX(a1.getX()-1);
}
repaint();
}
};
new Timer(delay,taskPerformed).start();
...
信息:如果只有一个对象,它会按预期向左移动。
回答我的问题。
在Ates
类中,不应将static
单词用作变量,而应使用this.
设置它们的前缀。
这应该是可行的。
public class Ates extends JFrame
{
protected int x;
protected int y;
public Ates(int a)
{
this.x = 700;
this.y = a;
}
好的,我能看到的唯一另一件事是您的StartGame()
仅初始化一次。 因此,您的new Timer
仅被调用一次。 因为是导致ActionListener
创建的计时器,所以它只能被创建并运行一次,因此永远无法到达将创建另一个矩形的阶段。 actionPerformed()
方法在程序中仅运行一次,因为没有动作或循环导致其再次运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.