2016-03-25 67 views
-2
public class Game extends JFrame implements ActionListener{ 

Drawing object=new Drawing(); 
Timer t=new Timer(1,this); 
int score; 
ArrayList<Enemy> bombs=new ArrayList<Enemy>(); 

public Game() 
{ 
    t.start(); 

    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(700,600); 
    setVisible(true); 
    add(object); 
    add(new JLabel("Hello")); 
    validate(); 
    createBombs(); 
} 

爲什麼我無法同時添加JLabel和對象。只有其中一個出現。 (JLabel)。添加多個對象

+0

你得到的錯誤是什麼?我們可以看到添加功能嗎? –

+0

什麼樣的對象是繪圖?你是否能夠在任何其他控件上顯示它?我最好的猜測是繪製得到添加沒有任何問題,但它實際上並沒有繪製的東西,所以它似乎沒有被添加。 –

+0

你知道JFrame的默認佈局管理器是什麼嗎? – FredK

回答

2

JFrame具有BorderLayout作爲默認值。在BorderLayoutadd方法將給定的組件添加到CENTER位置。

所以:

add(object); 
add(new JLabel("Hello")); 

與這些線路要添加兩個項目到CENTER位置。例如,如果您將標籤添加到SOUTH的位置,您的object將可見。

add(object); 
add(new JLabel("Hello"), BorderLayout.SOUTH); 

編輯:

由於@camickr說,你必須調用後setVisible(true)添加所有的組件。看看下面的代碼。

public class Game extends JFrame implements ActionListener { 

    Drawing object = new Drawing(); 
    Timer t = new Timer(1, this); 
    int score; 
    ArrayList<Enemy> bombs = new ArrayList<Enemy>(); 

    public Game() { 
     t.start(); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(700, 600); 
     add(object); 
     add(new JLabel("Hello")); 
     validate(); 
     createBombs(); 

     setVisible(true); 
    } 
} 
+0

非常感謝。我也嘗試過,但也添加BorderLayout.NORTH到我不應該有的對象。 –

+1

(1+)。 @Satti博士,儘管您應該使用BorderLayout.PAGE_END,但這是正確的解決方案。但是,在使框架可見之前,您還應該將組件添加到框架。 – camickr

+0

沒有必要驗證()。基本代碼應該是frame.add(...),frame.pack(),frame.setVisible(true)。 – camickr