JProgressBar:不会显示低值

时间:2013-01-28 11:07:54

标签: java swing look-and-feel jprogressbar

我在Java中尝试了JProgressBar的功能。但是有一个问题我无法解决:

当我将最小值设置为零时,最大值设置为100,当前值设置为6,则不会显示任何内容。进度条为空。如果我把7作为当前值,那么它的工作原理。这似乎是任何空边框或其他空间的问题。 Windows 7出现此问题,并且仅当UIManager设置为SystemLookAndFeel时才会出现此问题。

有谁知道这个问题并且有解决方案吗?以下是我的代码:

package lab;

import java.awt.FlowLayout;

import javax.swing.JDialog;
import javax.swing.JProgressBar;
import javax.swing.UIManager;

import core.Config;


public class ProgressSample extends JDialog {

public ProgressSample() {

    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    getContentPane().setLayout(new FlowLayout());

              // Nothing is displayed
    JProgressBar progressSix = new JProgressBar(0, 100);
    progressSix.setValue(6);
    getContentPane().add(progressSix);

              // This works
    JProgressBar progressSeven = new JProgressBar(0, 100);
    progressSeven.setValue(7);
    getContentPane().add(progressSeven);

    pack();
}

public static void main(String[] args) {

    try {
        UIManager.setLookAndFeel(UIManager
        .getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }

    ProgressSample dialogTest = new ProgressSample();
    dialogTest.setVisible(true);
}

}

3 个答案:

答案 0 :(得分:8)

Windows原生外观进度条的java代码以原始Windows进度条的方式呈现PROGRESSCHUNKSIZE步骤。请参阅the source for the Windows JProgressBar

它只是没有顺利渲染。如果您单步进度条,则可以看到这些块。

它可以自定义,但我不知道你将如何实现它。

问题的根源

最初的Windows XP进度条是小盒子。 theme defined一个大小的盒子,以及盒子之间的空隙。对于Vista及更高版本,主题已更改为指定框之间的间隙为0,但从未将框的大小重置为1像素。通过OpenThemeDataGetThemeInt Win32API函数读取值会显示我的主题(Windows 8)的块大小为6

答案 1 :(得分:2)

在设置系统L& F时,它看起来像布局问题/错误。

我设法通过设置问题的进度条设置首选大小来隐藏错误:

progressSix.setPreferredSize(new Dimension(200, 15));

似乎与进度条大小有关。如果我使用BoxLayout代替FlowLayout并充分调整容器大小,我可以看到即使是较小的值也会显示。

答案 2 :(得分:0)

设置后,进度指示变得平滑:

progressBar.setStringPainted(true);

但现在显示百分比,颜色变为蓝色。你可以这样做:

progressBar.setString(""); // null means automatic percentage
progressBar.setForeground(new Color(0, 210, 40)); // Windows7-green

我认为这是有效的,因为现在通过SWING而不是操作系统(部分)绘制了条形图。酒吧看起来不同,因为进度指示器缺少玻璃般的高光,并且被涂成坚固的。背景看起来仍然一样。我的猜测是,SWING让操作系统绘制它,好像进度是0%,然后绘制一个填充的矩形,文本在顶部。

可以通过查询UI常量来改进最后一个设置,颜色。但是,在WindowsLookAndFeel的所有ProgressBar.*键中,我只能找到蓝色。