خوب دوستان عنوان گویاست پس بریم سراغ کد:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.html.*;
public class SwingProgressBar {
Timer time;
JProgressBar p;
JPanel panel;
JFrame frame;
JButton btn;
JLabel lbl;
int i;
public SwingProgressBar() {
frame = new JFrame();
panel = new JPanel();
btn = new JButton("Start");
lbl = new JLabel("Ready");
i = 0;
p=new JProgressBar(0, 100);
p.setValue(0);
p.setStringPainted(true);
btn.addActionListener(new Action());
panel.setLayout(new BorderLayout());
panel.add(btn, BorderLayout.NORTH);
panel.add(p, BorderLayout.CENTER);
panel.add(lbl, BorderLayout.SOUTH);
frame.setLayout(new FlowLayout());
frame.setContentPane(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
time = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (i == 100) {
Toolkit.getDefaultToolkit().beep();
time.stop();
btn.setEnabled(true);
p.setValue(0);
String str = "Down Complete!";
lbl.setText(str);
}
i += 1;
p.setValue(i);
}
});
}
class Action implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
btn.setEnabled(false);
i = 0;
String str = "Downloading ...";
lbl.setText(str);
time.start();
}
}
public static void main(String[] args){
SwingProgressBar s=new SwingProgressBar();
}
}
این کد رو توضیح می دم:
p=new JProgressBar(0, 100);
در این خط ما یک شی از کلاس JProgressBar ساختیم و محدوده ی اون رو از 0 تا 100 قرار دادیم.
حالا بریم سراغ کد زیر : time = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (i == 100) {
Toolkit.getDefaultToolkit().beep();
time.stop();
btn.setEnabled(true);
p.setValue(0);
String str = "Down Complete!";
lbl.setText(str);
}
i += 1;
p.setValue(i);
}
});
در اینجا یک شی از کلاس Timer ساختیم، دقت کنید که این کلاس در بسته ی java.swing هست و نه در java.util و این دو کلاس اگرچه هم نام هستن ولی باهم متفاوتند.
کد :
time = new Timer(1000, new ActionListener() {
اینجا یک شی جدید ساختیم از کلاس Timer که با تاخیر 1000 میلی ثانیه معادل یک ثانیه کار می کنه و بعد به عنوان یک ایونت یک کلاس بی نام رو بهش متصل کردیم. دقت کنید که هروقت تابع start از این کلاس یعنی timer صدا زده میشه در واقع هر بار actionPerformed مربوط به ActionListener از این کلاس صدا زده میشه. سایر کدها به اندازه کافی گویا هستن.