在Java中,要實現一個具有動態效果的進度條,可以使用Swing庫中的JProgressBar
組件。以下是一個簡單的示例,展示了如何創建一個具有動態效果的進度條:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ProgressBarDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 創建一個JFrame窗口
JFrame frame = new JFrame("ProgressBar Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
// 創建一個JProgressBar組件
JProgressBar progressBar = new JProgressBar();
progressBar.setMinimum(0);
progressBar.setMaximum(100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
// 創建一個JButton組件
JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 當按鈕被點擊時,啟動一個新的線程來更新進度條
new Thread(() -> {
for (int i = 0; i <= 100; i++) {
final int progress = i;
try {
Thread.sleep(50); // 模擬耗時操作
} catch (InterruptedException ex) {
ex.printStackTrace();
}
// 在事件分發線程(EDT)中更新進度條
SwingUtilities.invokeLater(() -> {
progressBar.setValue(progress);
if (progress == 100) {
JOptionPane.showMessageDialog(frame, "任務完成!");
}
});
}
}).start();
}
});
// 將進度條和按鈕添加到窗口中
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(progressBar, BorderLayout.CENTER);
contentPane.add(startButton, BorderLayout.SOUTH);
// 顯示窗口
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
這個示例中,我們創建了一個包含JProgressBar
和JButton
的簡單窗口。當用戶點擊按鈕時,會啟動一個新線程來模擬耗時操作,并在每次迭代時更新進度條的值。為了確保進度條的更新在事件分發線程(EDT)中執行,我們使用SwingUtilities.invokeLater()
方法。
運行此示例后,你將看到一個具有動態效果的進度條,當任務完成時,會彈出一個提示框。