使用SetValue(NewValue)时,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 Max Health:49

口袋妖怪2 Max Health:50

口袋妖怪1当前健康:49

口袋妖怪2当前健康:50

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

在:49

之前禁止价值

禁止价值:49

最大禁止:49

最大限制:50

由于某种原因,最大值变化了,但值不会改变。我为获得Pokemon 2当前健康而做的打印与我试图设置栏的新值的确切代码相同。这里:

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

请在这里帮助我!我找不到为什么进度条值不想更新!

谢谢!

事实证明,如果您的新值高于最大值,则不会设置新值。您必须首先更新最大值,然后设置等于或低于最大值的新值。相反,我将setMaximim放在setValue之前,一切都起作用!

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());
    }
}

我在评论中复制了您的示例,一切正常。如果您从这个最小示例开始,则应注意没有问题。也许您的组件的颜色是原因?同样,我建议您从 aromic 示例开始。

最新更新