【效果图】

【描述】
进度条宽度保持和窗口宽度一致,进度最小值为0,最大值为100,每100毫秒进度值+1,进度条中间显示进度百分比
【代码】
package test;import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class Test extends JFrame {private JPanel panel;private JProgressBar progressBar;private int value = 0;private static final int PROGRESS_MIN_VALUE = 0;private static final int PROGRESS_MAX_VALUE = 100;private static final int PROGRESS_HEIGHT = 20;private Timer timer;public Test() {this.setBounds(10, 10, 300, 80);// this.setExtendedState(JFrame.MAXIMIZED_BOTH); // 最大化// this.setLocationRelativeTo(null);// 使窗口显示在屏幕中央this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel = new JPanel();// panel.setBackground(new Color(228, 209, 168));progressBar = new JProgressBar();progressBar.setMaximum(PROGRESS_MAX_VALUE);progressBar.setMinimum(PROGRESS_MIN_VALUE);progressBar.setValue(value);progressBar.setPreferredSize(getNewDimension());// 监听窗口大小,设置进度条宽度为窗口宽度(但是对于最大化和还原窗口无效,原因未知<-_->)this.addComponentListener(new ComponentAdapter() {@Overridepublic void componentResized(ComponentEvent e) {int width = getWidth();// System.out.println("componentResized...width=" + width);progressBar.setPreferredSize(getNewDimension());}});// 监听窗口最大化和还原,设置进度条宽度为窗口宽度this.addWindowStateListener(new WindowAdapter() {@Overridepublic void windowStateChanged(WindowEvent state) {if (state.getNewState() == 1 || state.getNewState() == 7) {// System.out.println("窗口最小化");} else if (state.getNewState() == 0) {// System.out.println("窗口恢复到初始状态");progressBar.setPreferredSize(getNewDimension());} else if (state.getNewState() == 6) {// System.out.println("窗口最大化");progressBar.setPreferredSize(getNewDimension());}}});// 设置进度条中间显示进度百分比progressBar.setStringPainted(true);// 进度条进度的颜色progressBar.setForeground(new Color(46, 145, 228));// 进度条背景的颜色progressBar.setBackground(new Color(220, 220, 220));panel.add(progressBar);this.add(panel);// 定时器,每100毫秒进度值+1timer = new Timer(100, new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {if (value >= PROGRESS_MAX_VALUE) {// 结束定时器timer.stop();// System.out.println("------------value=" + value);} else {// 设置进度值value++;progressBar.setValue(value);// System.out.println("actionPerformed...value=" + value);}}});timer.start();this.setVisible(true);}public Dimension getNewDimension() {return new Dimension(this.getWidth(), PROGRESS_HEIGHT);}public static void main(String[] args) {new Test();}
}
【说明】
上诉代码保留了之前测试的一些代码,已注释。


![图形视图(02):【类】QGraphicsScene [官翻]](https://img-blog.csdnimg.cn/img_convert/7d91375d14b1b5500fbd7c61c37fc289.png)















