1

当按下开始按钮时,我启动我的进度条,当我的任务完成时,我调用我试图停止进度条的不确定模式的函数,但我仍然无法做到这一点(我正在使用SwingWorker我的应用)

这是我启动进度条的代码;这段代码写在开始按钮内:

private void StartButtonMouseClicked(java.awt.event.MouseEvent evt) {
    Main f22 = new Main();

    f2.getfile(FileName, 0);
    f2.execute();

    SwingUtilities.invokeLater(new Runnable()
    {
        @Override
        public void run()
        { 
            jProgressBar1.setIndeterminate(true);

        }
    });

这是函数内部的代码,一旦任务完成就会调用。

jProgressBar1.setVisible(false);
4

1 回答 1

2

请尝试通过此代码,它是 JProgressBar 与 SwingWorker 的工作代码,然后一旦您了解它的工作原理,请随时以您的方式实现它。

 import java.awt.*;

 import java.awt.event.*;

 import java.util.List;

 import javax.swing.*;


 public class ProgressBarTest
 {
    public static void main(String[] args)
    {
       EventQueue.invokeLater(new Runnable()
          {
             public void run()
             {
                JFrame frame = new ProgressBarFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             }
         });
    }
 }

 /**
 * A frame that contains a button to launch a simulated activity, a progress bar, and a
  * text area for the activity output.
  */
 class ProgressBarFrame extends JFrame
 {
    public ProgressBarFrame()
    {
       setTitle("ProgressBarTest");
       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

       // this text area holds the activity output
       textArea = new JTextArea();

       // set up panel with button and progress bar
       final int MAX = 1000;
       JPanel panel = new JPanel();
       startButton = new JButton("Start");
       progressBar = new JProgressBar(0, MAX);
       progressBar.setStringPainted(true);
       panel.add(startButton);
       panel.add(progressBar);

       checkBox = new JCheckBox("indeterminate");
       checkBox.addActionListener(new ActionListener()
          {
             public void actionPerformed(ActionEvent event)
             {
                progressBar.setIndeterminate(checkBox.isSelected());
                progressBar.setStringPainted(!progressBar.isIndeterminate());
             }
          });
       panel.add(checkBox);
       add(new JScrollPane(textArea), BorderLayout.CENTER);
       add(panel, BorderLayout.SOUTH);

       // set up the button action

       startButton.addActionListener(new ActionListener()
         {
             public void actionPerformed(ActionEvent event)
             {
                startButton.setEnabled(false);
                activity = new SimulatedActivity(MAX);
                activity.execute();
             }
          });
    }

    private JButton startButton;
    private JProgressBar progressBar;
    private JCheckBox checkBox;
    private JTextArea textArea;
    private SimulatedActivity activity;

    public static final int DEFAULT_WIDTH = 400;
    public static final int DEFAULT_HEIGHT = 200;

    class SimulatedActivity extends SwingWorker<Void, Integer>
    {
       /**
        * Constructs the simulated activity that increments a counter from 0 to a
        * given target.
        * @param t the target value of the counter.
        */
       public SimulatedActivity(int t)
       {
          current = 0;
          target = t;
       }
       protected Void doInBackground() throws Exception
       {
         try
          {
             while (current < target)
             {
                Thread.sleep(100);
                current++;
                publish(current);
             }
          }
          catch (InterruptedException e)
          {
          }
          return null;
       }

       protected void process(List<Integer> chunks)
       {
          for (Integer chunk : chunks)
          {
             textArea.append(chunk + "\n");
             progressBar.setValue(chunk);
          }
       }

       protected void done()
       {
         startButton.setEnabled(true);
      }

      private int current;
       private int target;
    }
 }
于 2012-05-18T17:39:29.633 回答