Java Progress Bar (JProgressBar) - Swing Example |
Java Progress Bar (JProgressBar) - Swing Example สำหรับ ProgressBar หรือ JProgressBar (javax.swing.JProgressBar) จัดอยู่ในกลุ่มของ Component โดย JProgressBar จะเข้ามาจัดการกับการแสดงสถานะของ Process ในรูปแบบของ Progress Bar แสดงตัวเลขสถานะขณะที่กำลังทำงาน การใช้งาน ProgressBar จะเกี่ยวกพันกับการใช้งาน Thread หรือ SwingWorker เพราะการตรวจสอบ Process การทำงานจะอยู่ในรูปแบบของ Background Process ส่วนคำสั่งการทำงานนั้น สามารถกำหนดเงื่อนไขการแสดงสถานะ จำนวน % ของการทำงานได้จาก Property ชื่อว่า setValue();
Java Progress Bar (JProgressBar) - Swing Example
Syntax
JProgressBar progressBar = new JProgressBar();
Controls Icon Tools
ในการสร้าง Progress Bar เพื่อใช้งานจริง ๆ จะต้องมีการใช้ Thread เข้ามาช่วยในการทำงาน เพราะ Thread ในณะที่ทำงานหน้าจอของโปรแกรมจะไม่ค้างหรือแฮ้งค์ หรือจะสามารถใช้ SwingWorker เข้ามาใช้งานก็ได้ (ดูตัวอย่างที่ 3)
public static void startProgress() {
Runnable runnable = new Runnable() {
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.setValue(i);
}
btnStart.setEnabled(true);
}
};
new Thread(runnable).start();
}
ในการใช้ ProgressBar การใช้งานจริงนั้นจะต้องสอดคล้องกับ Process ที่เกิดขึ้นจริง ซึ่งเราจะแทรกการทำงานใน Method นี้ เช่น เรามีข้อมูลที่จะต้อง Insert ประมาณ 1000 รายการ นั้นหมายถึงว่าเราจะต้องวนลูป 1000 ครั้ง และเพื่อให้ได้ครบ Progress เท่ากับ 100% เราจะต้องเอา 1000/100 = 10 นั่นหมายถึงว่าเมื่อ Loop ทำงานครบ 10 ครั้ง ก็ให้ส่งไป Update สถานะ 1 ครั้ง
Example 1 การสร้าง Progress Bar ด้วย JProgressBar แบบง่าย ๆ
MyForm.java
package com.java.myapp;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyForm extends JFrame {
static JProgressBar progressBar;
static JButton btnStart;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyForm frame = new MyForm();
frame.setVisible(true);
}
});
}
/**
* Create the frame.
*/
public MyForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 362, 249);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);
// ProgressBar
progressBar = new JProgressBar();
progressBar.setBounds(70, 43, 196, 26);
progressBar.setStringPainted(true);
getContentPane().add(progressBar);
// Thread
btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnStart.setEnabled(false);
startProgress();
}
});
btnStart.setBounds(128, 113, 89, 23);
getContentPane().add(btnStart);
}
public static void startProgress() {
Runnable runnable = new Runnable() {
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.setValue(i);
}
btnStart.setEnabled(true);
}
};
new Thread(runnable).start();
}
}
Output
จาก Code นี้เราสามารถแทรกการทำงาน ได้ใน Method ของ startProgress ซึ่งเราอาจจะกำหนดเงื่อนไขการทำงานจาก 0 ถึง 100 และแสดงสถานะใน ProgressBar
คลิกที่ Start เพื่อสดสอบการทำงานของ ProgressBar
แสดง ProgressBar ในขณะทำงาน ซึ่งในตัวอย่างนี้จะ Loop ค่า จาก 0 ถึง 100 และใช้การหยุดเวลา 100/1000 ใน 1 วินาที
Example 2 การสร้าง Progress Bar ด้วย JProgressBar แบบ Dialog ด้วย JDialog
MyForm.java
package com.java.myapp;
import java.awt.EventQueue;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyForm extends JFrame {
static JProgressBar progressBar;
static JButton btnStart;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyForm frame = new MyForm();
frame.setVisible(true);
}
});
}
/**
* Create the frame.
*/
public MyForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 362, 249);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);
// ProgressBar
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
// Thread
btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnStart.setEnabled(false);
startProgress();
final JComponent[] inputs = new JComponent[] {
progressBar
};
JOptionPane.showMessageDialog(null, inputs, "ProgressBar", JOptionPane.YES_NO_CANCEL_OPTION);
}
});
btnStart.setBounds(128, 113, 89, 23);
getContentPane().add(btnStart);
}
public static void startProgress() {
Runnable runnable = new Runnable() {
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.setValue(i);
}
btnStart.setEnabled(true);
}
};
new Thread(runnable).start();
}
}
Output
คลิกที่ปุ่ม Start
แสดง Dialog แบบ ProgressBar
Example 3 การสร้าง Progress Bar แบบ Modal Dialog และ SwingWorker แบบ BackgroundWorker
สำหรับ SwingWorker ถือว่าเป็น Class ที่ช่วยในการทำงานแบบ Background Process ที่มาพร้อมกับ Java โดยที่เราไม่ต้องมาเขียน Thread เอง และมีรูปแบบการใช้งานที่ง่าย และสามารถแทรก ProgressBar เพื่อแสดงสถานะการทำงานได้
MyForm.java
package com.java.myapp;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JButton;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class MyForm extends JFrame {
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyForm frame = new MyForm();
frame.setVisible(true);
}
});
}
/**
* Create the frame.
*/
public MyForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 362, 249);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);
JButton btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
new BackgroundWorker().execute();
}
});
}
});
btnStart.setBounds(128, 113, 89, 23);
getContentPane().add(btnStart);
}
public class BackgroundWorker extends SwingWorker<Void, Void> {
private JProgressBar pb;
private JDialog dialog;
public BackgroundWorker() {
addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equalsIgnoreCase(evt.getPropertyName())) {
if (dialog == null) {
dialog = new JDialog();
dialog.setTitle("Processing");
dialog.setLayout(new GridBagLayout());
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(2, 2, 2, 2);
gbc.weightx = 1;
gbc.gridy = 0;
dialog.add(new JLabel("Processing..."), gbc);
pb = new JProgressBar();
pb.setStringPainted(true);
gbc.gridy = 1;
dialog.add(pb, gbc);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setModal(true);
JDialog.setDefaultLookAndFeelDecorated(true);
dialog.setVisible(true);
}
pb.setValue(getProgress());
}
}
});
}
@Override
protected void done() {
if (dialog != null) {
dialog.dispose();
}
}
@Override
protected Void doInBackground() throws Exception {
for (int index = 0; index < 100; index++) {
setProgress(index);
Thread.sleep(100);
/**
* Do work
* Do work
* Do work
*/
}
return null;
}
}
}
Output
จาก Code เราจะเขียนการทำงานต่าง ๆ ไว้ใน Method ของ doInBackground() ซึ่งในตัวอย่างนี้จะยากตัวอย่างการทำงาน Loop จาก 0 ถึง 100 และในแต่ะล่ะ Loop จะหยุดทำงานทำ 100/1000 ต่อ 1 วินาที และในตัวอย่างนี้ยังใช้ Dialog แบบ Modal คือเมื่อ ProgressBar ทำงาน จะไม่สามารถคลิกตำแหน่งอื่น ๆ ได้ จะต้องรอจนกว่าจะทำงานเสร็จ
คลิกที่ปุ่ม Start เพื่อเริ่มการทำงาน
แสดง ProgressBar แบบ Modal Dialog และจะไม่สามารถคลิกตำแหน่งอื่น ๆ ได้ จะต้องรอจนกว่าโปรแกรมจะทำงานเสร็จ
Property & Method (Others Related) |
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2013-09-03 22:04:55 /
2013-09-04 14:40:56 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|