簡體   English   中英

從JFrame中的類繪制很多相同的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM