【发布时间】:2014-07-09 03:59:58
【问题描述】:
答案是我在问题底部写的
我想在一个框架中获得很多“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;
}
【问题讨论】:
-
你把它们都画在同一个地方?
-
你确定所有
Ates都有不同的x和y吗?你确定startGame.alist有多个元素吗? -
向我们展示
alist以及它是如何创建的 -
我编辑了问题。
-
如果您不打算对它做任何事情,那么将
a作为参数传递给构造函数有什么意义?
标签: java swing arraylist jpanel graphics2d