Java 在JFrame中从类中绘制许多相同的对象
答案由我写在问题的底部 我想在一帧中得到很多“Ates”对象。我尝试了很多例子,但总是失败 在本文中,我想看到很多向左的矩形。然而,只有一个,而且速度越来越快 它不会同时显示多个对象。你能告诉我有什么问题吗 我使用了以下代码:Java 在JFrame中从类中绘制许多相同的对象,java,swing,arraylist,jpanel,graphics2d,Java,Swing,Arraylist,Jpanel,Graphics2d,答案由我写在问题的底部 我想在一帧中得到很多“Ates”对象。我尝试了很多例子,但总是失败 在本文中,我想看到很多向左的矩形。然而,只有一个,而且速度越来越快 它不会同时显示多个对象。你能告诉我有什么问题吗 我使用了以下代码: public class GamePanel extends JPanel { public void paint(Graphics g) { super.paint(g); g.setColor(Color.BLACK);
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);
}
Ates等级:
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;
}
StartName类:
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();
...
好的,我能看到的另一件事是您的
StartGame()
只初始化了一次。因此,您的新计时器只调用一次。因为正是计时器导致创建了ActionListener
,所以它只创建并运行了一次,因此永远无法到达创建另一个矩形的阶段。actionPerformed()
方法在程序中只运行一次,因为没有操作或循环使其再次运行。是否将它们都绘制在同一位置?是否确定所有的ate
具有不同的x和y?你确定startGame.alist
有不止一个元素吗?向我们展示alist
以及它是如何创建的。如果你不打算对它做任何事情,将a
作为参数传递给构造函数有什么意义?正如你在-edited-question中看到的,它不应该每次都是相同的。我错了吗?不,你是对的,每次调用这个方法都会生成一个不同的数字——我现在很困惑,左边是zick zacking。没有太多的对象。@user2670532这是我能看到的唯一可能导致问题的东西。如果不是这样的话,我真的很困惑,希望其他人能够对它进行更多的阐述,我相信它是一个循环。我在“actionPerformed”中写下了变量的值,而且如果有一个矩形,由于使用了相同的函数,它工作得很好。
public class Ates extends JFrame
{
protected int x;
protected int y;
public Ates(int a)
{
this.x = 700;
this.y = a;
}