Java Swing 实现loading...
时间: 2024-10-09 15:11:06 浏览: 53
Java Swing 中实现 "loading..." 动画通常是为了向用户显示某个操作正在进行,比如数据加载或者界面初始化。你可以通过以下步骤来创建一个简单的 Swing 加载指示器:
1. **创建 JProgressBar**:`JProgressBar` 是 Swing 提供的一个组件,用于显示进度条。你可以创建一个新的 `JProgressBar` 对象。
```java
JProgressBar progressBar = new JProgressBar(0, 100); // 设置最大进度为100
```
2. **设置初始状态**:将进度条设置为0,表示开始加载。
```java
progressBar.setValue(0);
```
3. **添加到容器**:将进度条添加到窗口的适当位置,如 `JFrame` 或 `JDialog` 的中心。
```java
frame.getContentPane().add(progressBar, BorderLayout.CENTER);
```
4. **动态更新进度**:在需要的地方更新进度条的值,例如每次加载一定量的数据时增加进度。
```java
public void loadProgress(int increment) {
int currentValue = progressBar.getValue();
progressBar.setValue(currentValue + increment);
if (currentValue < 100) {
SwingUtilities.invokeLater(() -> loadProgress(increment)); // 使用SwingUtils.invokeLater避免同步阻塞UI
}
}
```
5. **隐藏/显示进度条**:当加载完成时,可以调用 `setVisible(false)` 来隐藏进度条。
完整的例子:
```java
import javax.swing.*;
import java.awt.*;
public class LoadingExample extends JFrame {
private JProgressBar progressBar;
public LoadingExample() {
progressBar = new JProgressBar(0, 100);
progressBar.setStringPainted(true); // 显示文本
JButton button = new JButton("Start Load");
button.addActionListener(e -> startLoad());
JPanel panel = new JPanel(new GridLayout(1, 2));
panel.add(button);
panel.add(progressBar);
setContentPane(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 150);
setLocationRelativeTo(null);
}
private void startLoad() {
progressBar.setVisible(true);
loadProgress(10); // 示例:每10次更新进度条
// 在这里处理实际的加载操作...
progressBar.setValue(100); // 加载完成后设为100%
progressBar.setVisible(false);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
LoadingExample example = new LoadingExample();
example.setVisible(true);
});
}
private void loadProgress(int increment) {
SwingUtilities.invokeLater(() -> {
int currentValue = progressBar.getValue();
progressBar.setValue(currentValue + increment);
if (currentValue < 100) {
loadProgress(increment);
}
});
}
}
```
阅读全文