2011-10-04 69 views
0

我正在學習Java和我創建一個內存類型的遊戲,你必須找到兩個平等的卡片。Java(GUI)多次添加JButton?

我創建了一個窗口等等等,但我的問題是添加多個JButtons它。 (我的卡片是帶圖標的JButton)。我已經評論過我的代碼,我的問題在哪裏。

//Get the images. 
private File bildmapp = new File("bildmapp"); 
private File[] bilder = bildmapp.listFiles(); 
//My own class extending JButton 
Kort[] k = new Kort[bilder.length]; 

for(int i = 0; i < bilder.length; i++){ 
     k[i] = new Kort(new ImageIcon(bilder[i].getPath())); 
    } 



//Later in my code: 
    int sum = rows * columns; 
    Kort[] temp = new Kort[sum]; 

      //My function to randomize. 
    Verktyg.slumpOrdning(k); 

      //***********************// 
      //Trying to fill a array from K (which contains all cards) so my temp contains SUM cards and SUM/2 pairs 
    for(int i = 0; i < sum/2; i++){ 
     temp[i] = k[i]; 
     temp[i+sum/2] = k[i]; 
    } 


      //Problem is that i only get SUM/2 (half of the cards) cards, not the 16 (8 pairs) i would like to add in this case 
      //SYNLIGT = VISIBLE. 
    for(int i = 0; i < sum; i++){ 
     temp[i].setStatus(Kort.Status.SYNLIGT); 
     j.add(temp[i]); 
    } 

回答

4

你的代碼最終添加每個Kort物體到容器兩次,由於陣列temp包含兩個引用到每個Kort。當您第二次添加Kort時,它會移至第二個位置。 A Component一次只能出現在一個地方。

+0

我不太清楚,我明白了。由於k []包含我所有的卡,我想創建一個新的數組temp,我從K/2填充temp/2。然後另一半溫度(溫度/ 2)將包含相同的一組卡。即temp/2的副本。所以這不會工作,或者我只是寫我的代碼錯了? – TutenStain

+2

你的循環完成你所描述的內容,所以在這個意義上它是「正確的」。但是,您不能兩次將卡片添加到容器中,並期望在容器中獲得兩張卡片,而不是兩次進入您的汽車,並期望成爲您自己的乘客:)如果您需要兩張相同的卡片出現在容器在同一時間,你必須創建兩個獨立但相同的'Kort'對象來表示它們。 –

+1

很好的解釋!得到它的工作。謝謝! – TutenStain

0

您必須創建sum JButton對象不是sum/2;否則2個按鈕是相同的,因此只顯示一次。

2

您不得添加兩次相同的窗口小部件。你需要兩個單獨的按鈕(但你可以在兩個上使用相同的圖標)。