你知道怎么用Swing写一个进度条?
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);
}}
2、执行下上面的代码,看看效果
3、功能是有,但是有一点不好
进度条上显示百分比
更改下代码
Code:
progressBar.setStringPainted(true);
4、执行一下看看效果
进度条上已经有进度信息了
OK
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);
}
});
}
}
6、执行下看看效果
很OK
O了