7

我在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);
}

}
4

3 回答 3

8

Windows 原生外观进度条的 Java 代码以PROGRESSCHUNKSIZE原始 Windows 进度条的方式使用步骤呈现。请参阅Windows JProgressBar 的源代码

只是渲染不流畅。如果您踏上进度条,您可以看到这些块。

它可能是可定制的,但我不知道你将如何完成它。

问题的根源

原来的 Windows XP 进度条是在小盒子里。主题定义了盒子的大小,以及盒子之间的间隙。对于 Vista 及更高版本,主题已更改为将框之间的间隙指定为 0,但从未将框的大小重置为 1 像素。OpenThemeData通过and函数读取值GetThemeInt Win32API显示块大小6适用于我的主题(Windows 8)。

于 2013-01-28T12:12:27.427 回答
2

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

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

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

它似乎与进度条大小有关。如果我使用 aBoxLayout而不是 theFlowLayout并且足够调整容器的大小,我可以看到它甚至显示较小的值。

于 2013-01-28T11:16:23.390 回答
0

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

progressBar.setStringPainted(true);

然而,它现在显示一个百分比,并且颜色变为蓝色。你可以这样做:

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

我认为这是可行的,因为现在(部分)由 SWING 而不是由操作系统绘制条形图。进度条看起来有所不同,因为进度指示器缺少玻璃状的高光并且被涂成实心。背景看起来还是一样的。我的猜测是 SWING 让操作系统将其绘制为进度为 0%,然后在顶部绘制一个填充的矩形和文本。

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

于 2015-12-01T12:11:46.040 回答