Removing the indeterminate mode of JProgressBar

走远了吗. 提交于 2019-12-11 08:37:58

问题


I start my progress bar when the start button is pressed and when my task is completed, I call the function in which I am trying to stop the indeterminate mode of progress bar, but I am still unable to do that (I am using SwingWorker for my application)

Here is my code for starting a progress bar; this code is written inside start button:

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);

        }
    });

This is code inside the function, which is called once the task is completed.

jProgressBar1.setVisible(false);

回答1:


Please try to go through this code, its a working code for JProgressBar with SwingWorker, then once you understand the working of it, feel free to implement it in your way.

 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;
    }
 }


来源:https://stackoverflow.com/questions/10656658/removing-the-indeterminate-mode-of-jprogressbar

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