我有一个使用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打开的加载?
答案 0 :(得分:5)
这是一个棘手的问题,您需要在显示SwingWorker
之前启动JDialog
,但您还需要在不阻止代码的其他方面的情况下显示对话框
此示例使用附加到PropertyChangeListener
的{{1}}来监控SwingWorker
状态,此时它会将进度对话框设置为可见,但它使用{{1} },以免阻止当前事件执行过程...
然后使用STARTED
&#39; SwingUtilities.invokeLater
方法在对话框完成时关闭对话框。
SwingWorker