您的位置首页百科问答

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

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

的有关信息介绍如下:

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

Swing是开发Java桌面应用程序GUI的JDK。

本文就分享一个实现进度条的示例

先来段代码:

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);

}}

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

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

进度条上显示百分比

更改下代码

Code:

progressBar.setStringPainted(true);

执行一下看看效果

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

OK

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

使用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);

}

});

}

}

执行下看看效果

很OK

O了