Java 带图像和进度条的框架

Java Frame with Image and Progressbar

我想创建 splash/loading 屏幕,显示一个简单的 jpg 图像,并在该图像下显示一个活动进度条。

但是我找不到编码的解决方案。

到目前为止,这是我的图像代码,它工作完美,但不知何故我无法添加进度条。

请帮我写一个代码示例。

static void loadingScreen() {
    JFrame frame = new JFrame();
    frame.setSize(450, 450);
    frame.setResizable(true);
    frame.setLocationRelativeTo(null);
    frame.add(new JLabel(new ImageIcon("C://Users//Alex//Desktop//Image.jpg")));
    frame.setTitle("Loading...");
    frame.setVisible(true);

    try {
        Thread.sleep(3000);
    } catch (Exception e) {
        //exception
    }
    frame.dispose();
}

谢谢。

您的 JFrame 没有使用 LayoutManager。因此,仅使用整个 space 显示最后添加的组件。如果您在图像标签后添加 JProgressBar,您将只会看到空的 JProgressBar。 您肯定需要学习如何使用 LayoutManager。现在我会建议你 BorderLayout 将你的图片居中显示,进度条显示在底部。

您的代码的另一个问题是您的 Thread.sleep() 语句。永远不要让你的 GUI 线程进入睡眠状态。使用另一个将执行加载的线程。

这是给你的一些示例代码。

JFrame frame = new JFrame();
JProgressBar progressbar = new JProgressBar(0, 100);
frame.setSize(450, 450);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
frame.add(new JLabel(new ImageIcon("C://Users//Alex//Desktop//Image.jpg")), BorderLayout.CENTER);
frame.add(progressbar, BorderLayout.SOUTH);
frame.setTitle("Loading...");
frame.setVisible(true);

Thread loadingThread = new Thread(new Runnable(){
    @Override
    public void run() {
        for(int i = 0; i < 100; i++){
            try {
                Thread.sleep(100);
            } catch (Exception e) {
                //exception
            }
            progressbar.setValue(i);
        }
        frame.dispose();
    }
});
loadingThread.start();