【问题标题】:How to make the JDialog invisible when the JProgressBar reaches 100%?当 JProgressBar 达到 100% 时如何使 JDialog 不可见?
【发布时间】:2015-04-20 11:23:22
【问题描述】:

相关代码:

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

这里是actionPerformed 方法:

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);*/
}

TaskactionPerformed 方法下方的嵌套类:

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) {}
     }
  }
} 

我希望 JDialog 在其中的 JProgressBar 达到 100% 时不可见。目前,当 JProgressBar 达到 100% 时,JDialog 不会关闭。其实我想在JProgressBar达到100%后执行actionPerformed中的注释代码。

我在task.start(); 之后尝试了task.join();,但这给出了否定的结果。当我这样做时,会显示 JDialog 的边框,然后过了一会儿,对话框关闭。我从来没有在 JDialog 中看到任何东西。

请注意,我是 SwingUtilities 的新手。

如何使程序按我的预期运行?

【问题讨论】:

  • 使用SwingWorker...好吧,但是一旦run 方法结束,您将需要对dialog 的引用,以便您可以调用dispose。 .
  • @MadProgrammer,谢谢。 dialogTask 中可见。所以我可以直接使用它。但是有一个小问题。请参阅@Kuba 的答案下的评论
  • 仅仅因为对话框是可见的,并不意味着你可以与之交互,你仍然需要某种对它的引用。至于您的“其他”问题,请考虑改用 SwingWorker
  • @MadProgrammer,谢谢。我终于用SwingWorker 让它工作了

标签: java swing jdialog jprogressbar


【解决方案1】:

怎么样:

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

【讨论】:

  • 这成功了!谢谢!但是有一个小问题。当我按下 JButton 时,JProgressBar 不会移动。它保持在 0%。这只是有时发生。一旦这没有发生,那么这个问题就永远不会出现。知道是什么原因造成的吗?
猜你喜欢
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多