Java Swing带有进度条的启动画面

bluesky1年前 ⋅ 143 阅读

ChatGPT的回答仅作参考:

以下是一个简单的Java Swing启动画面,带有进度条:

```java
import javax.swing.*;
import java.awt.*;

public class SplashScreen extends JWindow {

    private JProgressBar progressBar;
    private int progress;

    public SplashScreen() {
        JPanel panel = new JPanel(new BorderLayout());
        JLabel label = new JLabel(new ImageIcon("splash.png"));
        panel.add(label, BorderLayout.CENTER);
        progressBar = new JProgressBar();
        progressBar.setStringPainted(true);
        panel.add(progressBar, BorderLayout.SOUTH);
        setContentPane(panel);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        startProgressBar();
    }

    private void startProgressBar() {
        Thread thread = new Thread(() -> {
            while (progress < 100) {
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                progress++;
                progressBar.setValue(progress);
            }
            dispose();
        });
        thread.start();
    }

    public static void main(String[] args) {
        new SplashScreen();
        // do some initialization here
        // ...
        // show main window
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Main Window");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(400, 300);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}
```

在这个例子中,我们创建了一个`JWindow`,并在其中添加了一个带有进度条的面板。我们使用`Thread`来模拟初始化过程,并在进度条上更新进度。一旦进度达到100%,我们就关闭启动画面并显示主窗口。

请注意,我们使用`SwingUtilities.invokeLater()`来确保在事件分派线程上创建和显示主窗口。这是因为Swing是单线程的,必须在事件分派线程上执行所有UI操作。

全部评论: 0

    相关推荐