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