JProgressBar:不会显示低值

Ben*_*enj 7 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);
}

}
Run Code Online (Sandbox Code Playgroud)

Pet*_*esh 8

Windows本机外观进度条的Java代码使用PROGRESSCHUNKSIZE原始Windows进度条的方式呈现.请参阅Windows JProgressBar的源代码.

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

它可能是可定制的,但我不知道你将如何实现它.

问题的起源

最初的Windows XP进度条是在小盒子里.的主题定义的尺寸的方块,和盒之间的间隙.对于Vista及更高版本,主题已更改为指定框之间的间隙为0,但从未将框的大小重置为1像素.通过OpenThemeDataGetThemeInt Win32API函数读取值表明块大小适用6于我的主题(Windows 8).


Dan*_* D. 2

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

我通过为进度条设置首选大小来隐藏该错误,并出现以下问题:

progressSix.setPreferredSize(new Dimension(200, 15));
Run Code Online (Sandbox Code Playgroud)

好像和进度条大小有关。如果我使用 aBoxLayout而不是 theFlowLayout并充分调整容器的大小,我什至可以看到它显示较小的值。

  • 我尝试了这个,但唯一的改进是,它显示的当前值大于 4(而不是 6)。如果我将值设置在 1 和 4 之间,我也会遇到同样的问题。 (2认同)