2016-12-05 44 views
2

我使用JProgressBar作爲健康欄,所以我想在遊戲進行時手動設置欄的最大值和值。這款遊戲是一款口袋妖怪遊戲,它允許召喚新寵物小精靈。這些新的口袋妖怪可以有不同的最大健康值和當前健康值,這就是爲什麼我打電話給progressBar.setMaximum(newPokemonMaxHealth)progressBar.setValue(currentPokemonHealth)。我甚至撥打progressBar.repaint(),progressBar.revalidate()progressBar.update(progressBar.getGraphics(),這些都沒有爲我工作。JProgressBar在使用setValue時不更新值(newValue)

這裏是進度條的初始化:

UIManager.put("ProgressBar.selectionForeground", Color.BLACK); 
    poke1Health = new JProgressBar(0); 
    poke1Health.setMaximum(board.getTrainer1().getBattlingPokemon().getMaxHealth()); 
    poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

    poke1Health.setStringPainted(true); 
    poke1Health.setForeground(Color.green); 
    poke1Health.setBackground(Color.red); 
    poke1Health.setPreferredSize(new Dimension(50, 10)); 
    centerPanel1.add(poke1Health); 

然後,當我試圖改變最大和值:

  board.getTrainer1().pokemonChanged(1); 
      poke1Health.setValue(board.getTrainer1().getPokemon(0).getCurrentHealth()); 
      poke1Health.setMaximum(board.getTrainer1().getPokemon(0).getMaxHealth()); 
      poke1Health.repaint(); 
      poke1Health.revalidate(); 
      poke1Health.update(poke1Health.getGraphics()); 

我打印出當前的健康和最大生命值不同的口袋妖怪的價值觀和價值觀是他們應該是什麼,這表明價值觀不是問題。

出於某種原因,酒吧值似乎並不想改變,但最大值。

當新的口袋妖怪健康狀況高於先前的口袋妖怪健康狀況時,它不會更新該值。如果新的口袋妖怪的健康狀況低於先前的口袋妖怪健康狀況,它會更新該值,沒問題。這裏是我打印的內容:

口袋妖怪1最大健康狀況:49

口袋妖怪2最大健康:50

口袋妖怪1名當前健康狀況:49

口袋妖怪2當前健康狀況:50

然後我在設置新的最大值和新值之前和之後打印條值。

酒吧值之前:49

條值之後

:49

酒吧最大前:49

酒吧最大後:50

出於某種原因,最大值改變了,但價值不變。爲了獲得口袋妖怪2當前的健康狀態而打印出來的結果與我嘗試設置該欄的新值時使用的代碼完全相同。這裏:

poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

System.out.println("Pokemon 2 Current Health: " + board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

請幫我看看這裏!我找不到爲什麼進度條值不想更新!

謝謝!

+1

如果你用你的問題發佈[mcve]代碼,你可能會得到最好的運氣 - 一個小的可編譯的可運行示例程序,可以顯示你的問題。這不是你的整個程序,也不是很大,但是很小,足夠小,可以作爲代碼格式的文本發佈在你的問題中。它再次運行 - 具有主要方法,具有導入和編譯所需的全部內容。 –

+0

實際的代碼非常大!我試過這個: 'import java.awt.FlowLayout; import javax.swing.JProgressBar; 公共類JProgressBarError { \t公共靜態無效主要(字符串ARGS []) \t { \t \t酒吧JProgressBar的新= JProgressBar的(0,10); \t \t bar.setValue(10); \t \t System.out.println(bar.getValue()); \t \t System.out.println(bar.getMaximum()); \t \t bar.setMaximum(20); \t \t bar.setValue(20); \t \t System.out.println(bar.getValue()); \t \t System.out.println(bar.getMaximum()); \t} }' 這個工作和價值才得以改觀,但由於某種原因它沒有在我的代碼工作! – Cole

+0

我不知道如何去評論新行! :( – Cole

回答

0
import java.awt.FlowLayout; 
import javax.swing.JProgressBar; 

public class JProgressBarError { 
    public static void main(String args[]) { 
     JProgressBar bar = new JProgressBar(0, 10); 
     bar.setValue(4); 
     System.out.println(bar.getValue()); 
     System.out.println(bar.getMaximum()); 
     bar.setMaximum(20); 
     bar.setValue(17); 
     System.out.println(bar.getValue()); 
     System.out.println(bar.getMaximum()); 
    } 
} 

我在評論中複製了你的例子,一切正常。 如果你從這個最簡單的例子開始,應該注意到沒有問題。 也許你的組件的顏色是原因? 同樣,我建議你從一個原子的例子開始。

+0

謝謝,我發佈了上述問題的答案! – Cole

1

發現如果您的新值高於豎條最大值,則不會設置新值。您必須先更新最大值,然後設置等於或低於最大值的新值。相反,我把setMaximum放在setValue之前,一切正常!