2016-12-05 180 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之前,一切正常!