使用setValue(newValue)时JProgressBar不更新值

时间:2016-12-05 23:23:33

标签: java swing jframe jprogressbar

我使用JProgressBar作为健康栏,所以我想在游戏进行时手动设置栏数最大值和值。游戏是一个口袋妖怪游戏,它允许召唤新的口袋妖怪。这些新的口袋妖怪可以具有不同的最大健康值和当前健康值,这就是我呼叫progressBar.setMaximum(newPokemonMaxHealth)progressBar.setValue(currentPokemonHealth)的原因。我甚至打电话给progressBar.repaint()progressBar.revalidate()progressBar.update(progressBar.getGraphics(),但这些都没有对我有用。

以下是进度条的初始化:

    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

     

Pokemon 2 Max Health:50

     

口袋妖怪1当前健康状况:49

     

口袋妖怪2当前健康状况:50

然后我在设置新的最大值和新值之前和之后打印了条形值。

  

之前的条形值:49

     

之后的条形值:49

     

Bars Max before:49

     

酒吧最大值:50

由于某种原因,最大值发生了变化,但值并未发生变化。我做的打印输出Pokemon 2当前的健康状况与我用来尝试设置条形码新值的确切代码相同。在这里:

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

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

请帮帮我吧!我无法找出进度条值不想更新的原因!!!

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您的新值高于条形最大值,则不会设置新值。您必须先更新最大值,然后将新值设置为等于或小于最大值。相反,我在setValue之前放置了setMaximum,一切正常!

答案 1 :(得分: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());
    }
}

我在评论中复制了你的例子,一切正常。 如果从这个最小的例子开始,应该注意没有问题。 您的组件的颜色可能是原因吗? 我再次建议您从 atomic 示例开始。