【问题标题】:Changing the colour of energy bars depending on their values?根据能量条的值改变能量条的颜色?
【发布时间】:2015-07-26 08:19:16
【问题描述】:

我创建了这个方法来检查我的进度条中的值。它在减少时按预期工作,即变为红色、黄色和橙色。但是当我增加值时,颜色不会更新。所以当它低于 25 并变成红色时,当我增加能量条的值时,它仍然是那个颜色。我在这里做错了什么?提前致谢。

public void checkEnergyBar(JProgressBar EnergyBar){
    if(EnergyBar.getValue()<25){
        EnergyBar.setForeground(Color.RED);
    }else if(EnergyBar.getValue()<51){
        EnergyBar.setForeground(Color.YELLOW);
    }else if(EnergyBar.getValue()<76){
        EnergyBar.setForeground(Color.orange);
    }else if(EnergyBar.getValue()<101){
        EnergyBar.setForeground(Color.GREEN);
    }

     EnergyBar.repaint();

}

我做了这些改变,但仍然没有快乐。

public void checkEnergyBar(JProgressBar EnergyBar){
    if(getEnergy()<26 ){
        EnergyBar.setForeground(Color.RED);
    }else if(getEnergy()<51 || getEnergy()>26){
        EnergyBar.setForeground(Color.YELLOW);
    }else if(getEnergy()<76 || getEnergy()>51){
        EnergyBar.setForeground(Color.orange);
    }else if(getEnergy()<101 || getEnergy()>76){
        EnergyBar.setForeground(Color.GREEN);
    }

     EnergyBar.repaint();

}

【问题讨论】:

  • checkEnergyBar() 方法绝对不依赖值变化的方向(因为它不存储任何以前的值),所以调用者代码有一些错误。
  • 能量条从 100 开始,随着能量的减少,所有 if 语句都起作用。当我增加值时,它不会反过来做同样的事情。
  • 我明白你在问什么,但我确定问题出在其他地方。我上面的评论说明了原因。
  • 我在某些情况下必须通过线程更新进度条属性。尝试使用 SwingWorker。
  • 理论上这听起来很简单。我很惊讶进度条如此有限。

标签: java progress-bar


【解决方案1】:

就我个人而言,我认为 JProgressBar 有问题。我有自己的、更可定制的制作进度条的方式。

不使用预制的JProgressBar,而是使用原有的图形显示方式:Canvas

创建canvas的子类,然后重写paint方法,添加表示颜色和值的变量,添加setValue方法。在paint方法中,根据值设置颜色,setForeground(color),然后简单地使用graphics参数绘制一个矩形(0,0,value,getHeight())。

这就是我个人制作进度条的方式。这还具有以下优点:
A) 您可以在画布上添加边框和背景颜色,就像进度条一样
B)您可以使用 graphics.paintImage 并将图像缩放/裁剪到正确的大小

希望这对您的进度条有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多