首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JProgressBar在使用setValue(newValue)时不更新值

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

Stack Overflow用户
提问于 2016-12-05 23:23:33
回答 2查看 1.6K关注 0票数 2

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

下面是进度条的初始化:

代码语言:javascript
运行
复制
    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);

然后,当我试图更改最大值和值时:

代码语言:javascript
运行
复制
            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());

我打印出了不同pokemon的当前健康值和最大健康值,值是它们应该的值,这表明这些值不是问题。

由于某些原因,条形图的值似乎不想更改,但最大值却要更改。

当新的口袋妖怪健康高于以前的口袋妖怪健康时,它将不会更新该值。如果新的口袋妖怪健康低于以前的口袋妖怪健康,它将更新值,没有问题。以下是我打印的内容:

口袋妖怪1最高健康: 49 口袋妖怪2最高健康: 50 口袋妖怪1当前健康: 49 口袋妖怪2当前健康: 50

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

以前的金条价值: 49 之后的酒吧价值: 49 最大酒吧数: 49 酒吧上限: 50

由于某些原因,最大值发生了变化,但值没有变化。我为获得Pokemon 2当前健康状态所做的打印与我用来尝试设置该条的新值的相同代码。在此:

代码语言:javascript
运行
复制
 poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth());

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

请帮帮我!我找不出为什么进度条值不想更新!

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-12-05 23:46:24

如果您的新值高于条形图的最大值,则不会设置新值。必须首先更新最大值,然后设置等于或低于最大值的新值。相反,我把setMaximum放在setValue之前,一切都成功了!

票数 1
EN

Stack Overflow用户

发布于 2016-12-05 23:45:36

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40985199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档