Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JFrame中从类中绘制许多相同的对象_Java_Swing_Arraylist_Jpanel_Graphics2d - Fatal编程技术网

Java 在JFrame中从类中绘制许多相同的对象

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);

答案由我写在问题的底部

我想在一帧中得到很多“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);
}
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;
    }