如何在应用程序屏幕中心显示加载对话框?

时间:2011-02-21 02:37:30

标签: java swing

我想知道如何在应用屏幕中心显示加载对话框。一个无限期的进度条。

4 个答案:

答案 0 :(得分:2)

如果你正在谈论一个JDialog,在调用pack()之后,调用setLocationRelativeTo(null)来使它居中。

答案 1 :(得分:1)

来自documentation

JProgressBar progressBar = new JProgressBar();
progressBar.setIndeterminate(true);

这将创建进度条。要使它居中,你应该看一下java中的different kinds of layout managers。 如果没有现有代码的任何示例,很难为您的问题提供更准确的答案。

答案 2 :(得分:1)

  

在应用屏幕中心显示加载对话框。

dialog.setLocationRelativeTo(...);
  

无限期的进度条。

阅读How to Use Progress Bars

上的Swing教程中的部分

答案 3 :(得分:1)

以下是我通常会显示“loading ...”进度条的方法。加载本身必须在后台线程上进行,以确保进度条不断更新。带进度条的框架将显示在屏幕中央。

public static void main(String[] args) throws Throwable {

    final JFrame frame = new JFrame("Loading...");
    final JProgressBar progressBar = new JProgressBar();
    progressBar.setIndeterminate(true);
    final JPanel contentPane = new JPanel();
    contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    contentPane.setLayout(new BorderLayout());
    contentPane.add(new JLabel("Loading..."), BorderLayout.NORTH);
    contentPane.add(progressBar, BorderLayout.CENTER);
    frame.setContentPane(contentPane);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);


    Runnable runnable = new Runnable() {
        public void run() {
            // do loading stuff in here
            // for now, simulate loading task with Thread.sleep(...)
            try {
                System.out.println("Doing loading in background step 1");
                Thread.sleep(1000);
                System.out.println("Doing loading in background step 2");
                Thread.sleep(1000);
                System.out.println("Doing loading in background step 3");
                Thread.sleep(1000);
                System.out.println("Doing loading in background step 4");
                Thread.sleep(1000);
                System.out.println("Doing loading in background step 5");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // when loading is finished, make frame disappear
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    frame.setVisible(false);
                }
            });

        }
    };
    new Thread(runnable).start();
}