用SwingWorker打开JDialog?

时间:2014-08-21 05:16:15

标签: java swing jdialog swingworker jprogressbar

我有一个使用JPA的项目J2SE。在一些JDialogs中,我返回getResultList()并在类的构造函数中填充JTable,JComboBox,JList等。

因此,当我为这些对话框创建任何实例时,有时会很慢。

我认为使用SwingWorker和JProgressbar创建一个(加载)打开JDialogs是一个很好的解决方案,但我不知道该怎么做。

我正在尝试这个。

//
JProgressbar progress = new JProgressBar();

//custommer dialog
JDialog custommer = new JDialog(); //here slow because I have List<Customer> and others lists
custommer.setModal(true);

private void openDialogs(JDialog dialog){
    progress.setVisible(true);
    progress.setIndeterminate(true);

    SwingWorker sw = new SwingWorker(){
        protected Object doInBackground(){
          //opening dialog
          dialog.setVisible(true);
          return null;
        }
    }

    //after opened
    protected void done(){
        progress.setVisible(false);
    }

}

如何打开JDialog并创建一个用SwingWorker和JProgressbar打开的加载?

1 个答案:

答案 0 :(得分:5)

这是一个棘手的问题,您需要在显示SwingWorker之前启动JDialog,但您还需要在不阻止代码的其他方面的情况下显示对话框

此示例使用附加到PropertyChangeListener的{​​{1}}来监控SwingWorker状态,此时它会将进度对话框设置为可见,但它使用{{1} },以免阻止当前事件执行过程...

然后使用STARTED&#39; SwingUtilities.invokeLater方法在对话框完成时关闭对话框。

SwingWorker