How to make the JDialog invisible when the JProgressBar reaches 100%?

对着背影说爱祢 提交于 2019-12-24 03:06:49

问题


Relevant piece of code:

JProgressBar progress;
JButton button;     
JDialog dialog;      //Fields of my GUI class

progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
button=new JButton("Done");
dialog=new JDialog();             //Done from methods

progress.setValue(0);
progress.setStringPainted(true);
progress.setBorderPainted(true);  //Also done from methods

button.addActionListener(this);   //Also done from methods

dialog.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.setTitle("Please wait...");
dialog.setBounds(475,150,250,100);
dialog.setModal(true);            //Also done from methods

dialog.add(new JLabel("Loading..."));
dialog.add(progress);             //Also done from methods

And here is the actionPerformed method:

public void actionPerformed(ActionEvent e)
{
    dialog.setVisible(true);
    Task task=new Task();
    task.start();


    //After the JProgressBar reaches 100%, do the following things:
    /*progress.setValue(progress.getMinimum());
    dialog.setVisible(false);*/
}

Task is a nested class just below the actionPerformed method:

private class Task extends Thread {    
  public void run(){
     for(int i =0; i<= 100; i++){
        final int j = i;
        SwingUtilities.invokeLater(new Runnable() {
           public void run() {
              progress.setValue(j);
           }
        });
        try {
           Thread.sleep(10);
        } catch (InterruptedException e) {}
     }
  }
} 

I want the JDialog not to be visible when the JProgressBar in it reaches 100% . Currently, the JDialog does not close when the JProgressBar reaches 100%. Actually, I want to the commented piece of code in actionPerformed to be executed after the JProgressBar reaches 100%.

I've tried task.join(); just after task.start();, but this gave a negative result. When I did this, the JDialog's border was displayed and then, after a moment, the dialog closes. I never see anything in the JDialog.

Note that I am new to SwingUtilities.

How do I make the program do what I am expecting?


回答1:


How about:

public void run() {
          if(j == 100)
              dialog.dispose();
          else
              progress.setValue(j);
       }


来源:https://stackoverflow.com/questions/29746517/how-to-make-the-jdialog-invisible-when-the-jprogressbar-reaches-100

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!