在Java swing中,如何绘制圆角进度条?
时间: 2023-06-26 07:08:05 浏览: 58
在Java Swing中,可以使用JProgressBar类来创建进度条。要绘制圆角进度条,可以使用Java 2D API来自定义进度条的绘制。
以下是一个简单的代码示例,它演示如何绘制一个圆角进度条:
```java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class RoundedProgressBar extends JProgressBar {
private static final long serialVersionUID = 1L;
public RoundedProgressBar() {
setPreferredSize(new Dimension(200, 20));
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(getBackground());
g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
g2.setColor(getForeground());
g2.fillRoundRect(0, 0, (int) (getWidth() * getPercentComplete()) - 1, getHeight() - 1, 15, 15);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
RoundedProgressBar progressBar = new RoundedProgressBar();
progressBar.setForeground(Color.BLUE);
panel.add(progressBar);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.setValue(i);
}
}
}
```
在这个例子中,我们覆盖了JProgressBar的paintComponent()方法,并使用Java 2D API绘制了圆角进度条。进度条的背景是使用getBackground()方法获取的颜色绘制的,而进度条的前景是使用getForeground()方法获取的颜色绘制的。getWidth()和getHeight()方法用于获取进度条的宽度和高度。getPercentComplete()方法用于获取当前进度的百分比。使用Thread.sleep()方法模拟了一个简单的进度条更新。