2015-08-31 49 views
0

我有一個selectpic()方法來設置jbuttons中的圖像。刪除jbutton中的圖像圖標

public void selectpic() { 
    rule rule = new rule(); 
    rule.shuffle(); 
    for (int i = 0; i < 9; i++) { 
     if (rule.pic[i] == 0) { 
      Icon0.setImage(Icon0.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon0)); 
     } else if (rule.pic[i] == 1) { 
      Icon1.setImage(Icon1.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon1)); 
     } else if (rule.pic[i] == 2) { 
      Icon2.setImage(Icon2.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon2)); 
     } else if (rule.pic[i] == 3) { 
      Icon3.setImage(Icon3.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon3)); 
     } else if (rule.pic[i] == 4) { 
      Icon4.setImage(Icon4.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon4)); 
     } else if (rule.pic[i] == 5) { 
      Icon5.setImage(Icon5.getImage().getScaledInstance(WIDTH,HEIGHT,Image.SCALE_DEFAULT)); 
      panel1.add(new JButton(Icon5)); 
     } 
    } 
} 

當每一輪結束時,我必須再次調用selectpic()方法來更改圖像。

但是,我不能再簡單地調用該方法來做到這一點。

Q1。是否有必要先刪除圖像,然後再次調用selectpic(),以便它可以更改圖像? Q2302。如果是這樣,我搜索的論壇,並使用

xxxx.setImage(null); 

可以去除圖像(XXXX是一個JButton的名稱),

但在selectpic(),我用它來添加Jbuttons中找到。

panel1.add(new JButton(Icon0)); 

我怎麼知道jbuttons的名稱,以便我可以使用xxxx.setImage(null);先刪除圖像?

謝謝!

+1

selectPic不是一個好方法,因爲它應該只關心自己在已經存在的JButtons上設置圖標,而不是更多。它不應該添加JButton到GUI。編輯:如Emd4600建議。 1+給他的回答。 –

回答

2

你沒有跟蹤你的JButtons,並且調用selectpic()用按鈕填充JPanel,所以多次調用它會創建很多按鈕。

,我建議你在類字段中輸入您Jbutton將,這樣的:

private JButton button1; 

然後,當你初始化你的用戶界面,也初始化按鈕:

// UI init here 
button1 = new JButton(); 
panel1.add(button1); 

而在selectpic方法,設置你的圖標。我認爲,現在我更仔細地看待你的代碼,JButtons數組會更好。因此,該領域的聲明將是這樣:

private JButton[] buttons = new JButton[numberOfButtons]; 

的initalization會是這樣的:

for (int i = 0; i < numberOfButtons; i++) { 
    buttons[i] = new JButton(); 
    panel1.add(buttons[i]); 
} 

和設置的圖標,

buttons[i].setIcon(chosedIcon); 

PD2:我建議你用小寫字母開始變量名稱,如Naming Convention

+0

並以大寫字母開始類名。即'rule rule = new rule();'應該是'Rule rule = new Rule();'。 1+這個答案。 –

+0

感謝您的回覆。起初,我真的想宣佈JButtons 1 - 9。但是,如果我這樣做,我不能編寫程序,以設置正確的圖像在某些jbuttons使用循環.... –

+0

這裏是pic []: int pic [] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \t \t \t 17,18,19,20,21,22,23,24,25,26}; acile然後selectpic()擴展到「else if(rule.pic [i] == 26).....」 shuffle後,我得到了pic []中的前9個數字,並使用forpic中的for循環()在jbuttons中設置相應的圖像。 –