Java: JProgressBar

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Một thanh tiến trình thường được dùng để thể hiện tiến trình của một hoạt động hay một sự kiện nào đó bằng cách hiển thị tiến trình theo dạng đồ họa và tỷ lệ phần trăm hoàn thành.

Thông thường thanh tiến trình được sử dụng trong màn hình nhấp nháy hiển thị trạng thái đang tải (loading) của một ứng dụng. Thanh tiến trình cũng được sử dụng để hiển thị tiến trình của một hoạt động theo thời gian như sao chép tập tin từ một vị trí khác. Thông thường bạn sẽ nhìn thấy một thanh tiến trình trong hầu hết các chương trình.

Swing cung cấp thành phần JProgressBar dùng để hiển thị tiến trình của một tác vụ nào đó như quá trình cài đặt theo tỷ lệ phần trăm hoàn thành.

Có hai loại thanh tiến trình là xác định và không xác định.

A typical progress bar
Thanh tiến trình xác định

An indeterminate progress bar
Thanh tiến trình không xác định

Thanh tiến trình xác định được sử dụng khi ta xác định được thời gian và số lượng theo tiến trình của một tác vụ, ngược lại thì ta sử dụng thanh tiến trình không xác định. Thanh tiến trình không xác định được dùng sẽ làm sống động trong việc thể hiện rằng công việc đang tiến triển.

Đoạn mã dưới đây demo cách sử dụng thanh tiến trình không xác định:

JProgressBar PGB = new JProgressBar();

/ * Thiết lập thanh tiến trình không xác định trong đó đối số chứa giá trị true */

pgb.setIndeterminate (true);

Hàm tạo của của JProgressBar

JProgressBar có thể được tạo bằng cách sử dụng một trong các hàm tạo sau:

JProgressBar()

Tạo một thanh tiến trình ngang với các thuộc tính mặc định. Mặc định thì min=0 max=100.

Ví dụ:

JProgressBar pgbLongTask = new JProgressBar ();

JProgressBar (int orient)

Tạo một thanh tiến trình với hướng xác định. Mặc định, min=0 và max=100. Đối số orient là một số nguyên ứng với một trong các giá trị JProgressBar.HORIZONTAL hoặc JProgressBar.VERTICAL.

Ví dụ:

JProgressBar pgbLongTask = new JProgressBar (JProgr essBar.VERTICAL);

JProgressBar (int min, int max)

Tạo ra một thanh tiến ngang theo mặc định, với các định giá trị min và max được thể hiện trong đối số.

Ví dụ:

JProgressBar pgbLongTask = new JProgressBar (0100);

JProgressBar (int orient, int min, int max)

Tạo ra một thanh tiến trình với hướng, min và max được quy định ở phần đối số.

Ví dụ:

JProgressBar pgbLongTask = mới JProgressBar (JProgressBar.VERTICAL, 0, 100);

Đoạn mã sau tạo một thanh tiến trình định hướng theo chiều dọc với min=0 và max=100, sau đó nó được đưa vào frame:

. . .

JProgressBarDemo() {

// Tạo một bảng chứa thanh tiến trình

JPanel JPanel = new JPanel ();

// Tạo thanh tiến trình với min=0 và max=100

JProgressBar pgbLongTask = new JProgressBar (JProgressBar.VERTICAL, 0, 100);

pgbLongTask.setValue (50);

jPanel.add (pgbLongTask);

// Thêm bảng vào frame

add(JPanel);

// Thiết lập các thuộc tính cho frame

setVisible (true);

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

pack();

. . .

Cập nhật cho JProgressBar

Khi thanh tiến trình được tạo ra và hiển thị, bạn gọi phương thức setValue() của thanh tiến trình để cập nhật tiến trình. Đối số của phương thức phải là giá trị nằm trong miền trá trị min và max. Thông thường thì một Timer được sử dụng để xác định số lượng công việc đã hoàn thành và cập nhật tới thanh tiến trình.

Đoạn mã sau demo cách xác định số lượng công việc hoàn thành và cập nhật tới thanh tiến trình.

JProgressBar pgbLongTask;

JFrame frmProgress;

Timer tmrProgress;

int taskCompleted = 0;

// Tạo thanh tiến trình với min=0 và max=100

pgbLongTask = new JProgressBar (0, 100);

// Thêm thanh tiến trình vào frame

frmProgress.getContentPane().add(pgbLongTask);

// Tạo timer với các sự kiện hành động được kích hoạt sau mỗi 2 giây

tmrProgress = new Timer(2000, new ActionListener() {

  public void actionPerformed (ActionEvent ae) {

// Mã Hành động

// Tính tỷ lệ phần trăm hoàn thành nhiệm vụ

taskCompleted = 50;

// Cập nhật tiến độ cho thanh tiến trình với tỷ lệ hoàn thành nhiệm vụ

pgbLongTask.setValue (taskCompleted);

. . .

}

});

Các phương thức của JProgressBar

Dưới dây là danh sách các phương thức phổ biến của JProgressBarare:

void setMinimum(int n)

Được sử dụng để thiết lập giá trị tối thiểu của thanh tiến trình, đối số n chứa giá trị tối thiểu.

Ví dụ:

/ * Thiết lập giá trị tối thiểu của thanh tiến trình là 10 * /

pgbLongTask.setMinimum(10);

void setMaximum(int n)

Được sử dụng để thiết lập giá trị tối đa là n cho thanh tiến trình.

Ví dụ:

/ * Thiết lập giá trị tối đa của thanh tiến trình là 50 * /

pgbLongTask.setMaximum(50);

void setValue(int n)

Được sử dụng để thiết lập giá trị tiến độ cho thanh tiến trình.

/ * Thiết lập giá trị của thanh tiến trình thành 0 * /

scpLongTask.setValue (0);

void setString (String S)

Được sử dụng để thiết lập chuỗi thể hiện giá trị số cho thanh tiến trình, giá trị này được theo sau bởi ký hiệu %.

Ví dụ:

/ * Hiển thị thông báo chỉ ra rằng đã hoàn thành nhiệm vụ * /

scpLongTask.setString("Đã hoàn thành một nửa");

void setStringPainted(boolean b)

Xác định xem chuỗi hiển thị thay giá trị số có được hiển thị hay không. Nếu tham số b được thiết lập là true thì giá trị được hiển thị.

Ví dụ:

scpLongTask.setStringPainted(true);

void setIndeterminate(boolean b)

Thiết lập giá trị b thành 'True' sẽ tạo thanh tiến trình không xác định, mặc định là thanh tiến trình xác định.

void setOrientation(int n)

Thiết lập thanh tiến trình là ngang hay dọc bằng cách xác định n là JProgressBar.HORIZONTAL hoặc JProgressBar.VERTICAL.

int getOrientation()

Lấy thanh tiến trình ngang/dọc.

String getString()

Lấy chuỗi tỷ lệ phần trăm.

public int getValue()

Trả về giá trị hiện tại từ BoundedRangeModel.

public int getMinimum()

Trả về giá trị nhỏ nhất hiện tại từ BoundedRangeModel.

public int getMaximum()

Trả về giá trị lớn nhất hiện tại từ BoundedRangeModel.

protected ChangeListener createChangeListener()

Được sử dụng để thực hiện tùy chỉnh ChangeListener.

public void addChangeListener(ChangeListener cl)

Thêm ChangeListenerto tới thanh tiến trình.

public void removeChangeListener(ChangeListener cl)

Loại bỏ ChangeListener khỏi thanh tiến trình.

public BoundedRangeModelgetModel()

Trả về mô hình đã được sử dụng bởi thanh tiến trình.

public void setModel(BoundedRangeModel newModel)

Thay thế mô hình hiện tại được sử dụng bởi thanh tiến trình.

protected void fireStateChanged()

Kích hoạt sự kiện có kiểu ChangeEventto listener đã đăng ký của nó. Chỉ có lớp con của JProgressBar mới có thể gọi nó

Xử lý sự kiện trong JProgressBar

Thành phần JProgressBar sẽ "lắng nghe" bằng cách sử dụng giao diện ChangeListener. Mỗi JProgressBar đều có phương thức addChangeListener để đăng ký listener. Giao diện ChangeListener có một phương thức là stateChanged(), theo đó mỗi lần giá trị tiến độ của thanh tiến trình được cập nhật thì nó sẽ kích hoạt một sự kiện và quyền kiểm soát được giao cho phương thức này.

Ứng dụng của bạn có thể phản ứng với sự kiện này và có hành động thích hợp. Để lấy giá trị hiện tại của thanh tiến trình, bạn sử dụng phương thức getValue().

Đoạn mã sau demo cách thêm một listener đến thanh tiến trình.

pgbLongTask.addChangeListener(new ChangeListener() {

  public void stateChanged(ChangeEvent ce) {

    // Mã Hành động

    ...

    ...

  }

});

» Tiếp: Cách sử dụng Text Component
« Trước: Giới thiệu về Timer
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!