你知道怎么用Swing写一个进度条?

2025-10-21 21:27:01

1、先来段代码:

package chapter4;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.concurrent.TimeUnit;

/**

* Created by MyWorld on 2016/3/24.

*/

public class SwingJProgressBarDemo {

   public static void main(String[] args) {

       JFrame frame = new JFrame("JProgressBarDemo");

       frame.setSize(400, 200);

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       frame.setLayout(new FlowLayout());

       final JProgressBar progressBar = new JProgressBar();

       progressBar.setOrientation(JProgressBar.HORIZONTAL);

       progressBar.setSize(200, 100);

       progressBar.setMinimum(0);

       progressBar.setMaximum(100);

       frame.add(progressBar);

       JButton btn = new JButton("Start ProgressBar");

       btn.addActionListener(new ActionListener() {

           @Override

           public void actionPerformed(ActionEvent e) {

               new Thread(new Runnable() {

                   @Override

                   public void run() {

                       for (int i = 0; i <= 10; i++) {

                           progressBar.setValue(i * 10);

                           try {

                               TimeUnit.SECONDS.sleep(1);

                           } catch (InterruptedException e1) {

                               e1.printStackTrace();

                           }

                       }

                   }

               }).start();

           }

       });        frame.add(btn);

       frame.setLocationRelativeTo(null);

       frame.setVisible(true);

   }}

你知道怎么用Swing写一个进度条?

2、执行下上面的代码,看看效果

你知道怎么用Swing写一个进度条?

你知道怎么用Swing写一个进度条?

3、功能是有,但是有一点不好

进度条上显示百分比

更改下代码

Code:

progressBar.setStringPainted(true);

你知道怎么用Swing写一个进度条?

4、执行一下看看效果

进度条上已经有进度信息了

OK

你知道怎么用Swing写一个进度条?

你知道怎么用Swing写一个进度条?

5、功能是实现了,就是感觉有点土啊

使用Substance更改下皮肤

更改后的代码:

package chapter4;import org.jvnet.substance.skin.SubstanceAutumnLookAndFeel;

import javax.swing.*;

import javax.swing.plaf.metal.MetalProgressBarUI;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.concurrent.TimeUnit;

/**

* Created by MyWorld on 2016/3/24.

*/

public class SwingJProgressBarDemo {

   public static void main(String[] args) throws UnsupportedLookAndFeelException {

       UIManager.setLookAndFeel(new SubstanceAutumnLookAndFeel());

//        JFrame.setDefaultLookAndFeelDecorated(true);

       SwingUtilities.invokeLater(new Runnable() {

           @Override

           public void run() {

               final JFrame frame = new JFrame("JProgressBarDemo");

               frame.setSize(400, 200);

               frame.setLocationRelativeTo(null);

               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

               frame.setLayout(new FlowLayout());

               final JProgressBar progressBar = new JProgressBar();

               progressBar.setOrientation(JProgressBar.HORIZONTAL);

               progressBar.setSize(200, 100);

               progressBar.setMinimum(0);

               progressBar.setMaximum(100);

               progressBar.setBorderPainted(true);

               progressBar.setUI(new MetalProgressBarUI());

               progressBar.setBackground(Color.green);

               progressBar.setForeground(Color.BLUE);

               progressBar.setStringPainted(true);

               frame.add(progressBar);

               JButton btn = new JButton("Start ProgressBar");

               btn.addActionListener(new ActionListener() {

                   @Override

                   public void actionPerformed(ActionEvent e) {

                       new Thread((new Runnable() {

                           @Override

                           public void run() {

                               for (int i = 0; i <= 10; i++) {

                                   final int finalI = i;

                                   SwingUtilities.invokeLater(new Runnable() {

                                       @Override

                                       public void run() {

                                           progressBar.setValue(finalI * 10);

                                       }

                                   });

                                   try {

                                       TimeUnit.SECONDS.sleep(1);

                                   } catch (InterruptedException e1) {

                                       e1.printStackTrace();

                                   }

                               }

                           }

                       })).start();

                   }

               });                frame.add(btn);

               frame.setVisible(true);

           }

       });

   }

}

你知道怎么用Swing写一个进度条?

你知道怎么用Swing写一个进度条?

6、执行下看看效果

很OK

O了

你知道怎么用Swing写一个进度条?

你知道怎么用Swing写一个进度条?

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢