swing:制作一个JProgressBar,上面贴着标签?

时间:2010-06-18 14:23:58

标签: java swing jprogressbar

我想使用JProgressBar并对其进行扩充以打印其当前值以及图形条。

progress bar

我猜测最好的方法是覆盖paintComponent:

@Override protected void paintComponent(Graphics g) {
// Let component paint first 
    super.paintComponent(g); 
// paint my contents next....
}

但我不确定......有什么建议吗?

2 个答案:

答案 0 :(得分:8)

我建议你使用自己的API:

public void setStringPainted(boolean b)
  

设置stringPainted属性的值,该属性确定进度条是否应呈现进度字符串。默认值为false,表示不绘制任何字符串。某些外观可能不支持进度字符串,或者仅当进度条处于确定模式时才支持它们。

public void setString(String s)
  

设置进度字符串的值。默认情况下,此字符串为null,表示使用简单百分比字符串的内置行为。如果您提供了自定义进度字符串并希望恢复为内置行为,请将字符串设置回null。   仅当isStringPainted方法返回true时,才会绘制进度字符串。

参考总是是一件好事。 :)

请注意,要在运行期间启用编辑值,您应该考虑将ChangeListener附加到进度条。

答案 1 :(得分:1)

基于杰克回答的工作解决方案:

final JProgressBar pbar = ...
pbar.setStringPainted(true);
final NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(true);
pbar.setString(nf.format(pbar.getValue()));             
pbar.addChangeListener(new ChangeListener()
{
    @Override public void stateChanged(ChangeEvent event) {
        pbar.setString(nf.format(pbar.getValue()));             
    }           
});