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)
Windows本机外观进度条的Java代码使用PROGRESSCHUNKSIZE原始Windows进度条的方式呈现.请参阅Windows JProgressBar的源代码.
它只是没有顺利渲染.如果您单步进度条,则可以看到块.
它可能是可定制的,但我不知道你将如何实现它.
问题的起源
最初的Windows XP进度条是在小盒子里.的主题定义的尺寸的方块,和盒之间的间隙.对于Vista及更高版本,主题已更改为指定框之间的间隙为0,但从未将框的大小重置为1像素.通过OpenThemeData和GetThemeInt Win32API函数读取值表明块大小适用6于我的主题(Windows 8).
设置系统 L&F 时,这看起来像是布局问题/错误。
我通过为进度条设置首选大小来隐藏该错误,并出现以下问题:
progressSix.setPreferredSize(new Dimension(200, 15));
Run Code Online (Sandbox Code Playgroud)
好像和进度条大小有关。如果我使用 aBoxLayout而不是 theFlowLayout并充分调整容器的大小,我什至可以看到它显示较小的值。