我想知道你们中是否有人知道如何在 Java 中显示一个漂亮的进度条,主要使用 Swing,尽管我不介意使用第三方库。
我一直在看 JProgressBar 教程,但没有一个是指样式栏。阅读 API,我发现了一个返回 ProgressBarUI 对象的 getUI 方法,但我没有看到很多方法可以自定义该对象。
我想要的是添加圆角,改变背景和前景色,宽度,长度,通常。
谢谢!
我想知道你们中是否有人知道如何在 Java 中显示一个漂亮的进度条,主要使用 Swing,尽管我不介意使用第三方库。
我一直在看 JProgressBar 教程,但没有一个是指样式栏。阅读 API,我发现了一个返回 ProgressBarUI 对象的 getUI 方法,但我没有看到很多方法可以自定义该对象。
我想要的是添加圆角,改变背景和前景色,宽度,长度,通常。
谢谢!
如果您不想替换用户选择的外观和感觉,您可以将 UI 委托替换为派生自BasicProgressBarUI
.
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.plaf.basic.BasicProgressBarUI;
/** @see http://stackoverflow.com/questions/8884297 */
public class ProgressBarUITest extends JPanel {
public ProgressBarUITest() {
JProgressBar jpb = new JProgressBar();
jpb.setUI(new MyProgressUI());
jpb.setForeground(Color.blue);
jpb.setIndeterminate(true);
this.add(jpb);
}
private static class MyProgressUI extends BasicProgressBarUI {
private Rectangle r = new Rectangle();
@Override
protected void paintIndeterminate(Graphics g, JComponent c) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
r = getBox(r);
g.setColor(progressBar.getForeground());
g.fillOval(r.x, r.y, r.width, r.height);
}
}
private void display() {
JFrame f = new JFrame("ProgressBarUITest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ProgressBarUITest().display();
}
});
}
}
最简单的方法是更改 LookAndFeel或者甚至创建您自己的类,该类从默认 L&F 之一扩展而来,并且只是更改进度条的 UI...