2016-04-22 2 views
0

У меня есть кнопка, и когда я нажму на нее, она запустит progressbar. По завершении один раз, я хочу, чтобы индикатор прогресса был сброшен, и если я снова нажму кнопку, он начнет новый.
Вот мой код:Как я могу сбросить JProgressBar в java?

else if (action == detectButton) { 

      // pb.setVisible(true); 

      SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        pb.setValue(0); 
        pb.repaint(); 
       } 
      }); 

      for (int i = 1; i <= 10; i++) { 
       final int val = i; 
       SwingUtilities.invokeLater(new Runnable() { 
        public void run() { 
         pb.setValue(val); 
         pb.repaint(); 
         try { 
          java.lang.Thread.sleep(100); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 

       }); 

      } 

Теперь проблема заключается в том, что, когда я первый запустить он работает нормально, но во второй попытке он не сбросить прогрессбар 0. Как сделать это на самом деле ??

EDIT:Я перекраску Progressbar каждый раз, но я видел, что она не достаточно гладкой, чтобы показать, что 10% произошло, то 20% ..

+0

Что ** ** это происходит со второй попытки? –

+0

как только индикатор прогресса завершится один раз, тогда, если я нажму на него второй раз, тогда прогресс останется полным. Если он не сбрасывается –

+0

Можете добавить еще один код в свой вопрос? Вы отправили runnable, сбрасывает индикатор выполнения в своем потоке и ждет полные две секунды, между тем for-loop запускает 10 новых runnables –

ответ

0

Ваш JProgressBar не сбрасывается, потому что он будет перерисовываться после завершения первого Runnable. Но ваш java.lang.Thread.sleep(2000); предотвратить это.

+0

Я удалил строку, но такое же условие .. как только панель прогресса заполнена, тогда, если i нажмите кнопку еще раз, чтобы она оставалась полной. Я попробовал, давая сон() в forloop также. –

0

Вот полный пример, как использовать ProgressBar:

public class TestWindow 
{ 

    private JFrame frame; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       try 
       { 
        TestWindow window = new TestWindow(); 
        window.frame.setVisible(true); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public TestWindow() 
    { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() 
    { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     final JProgressBar progressBar = new JProgressBar(); 
     progressBar.setBounds(10, 11, 414, 14); 
     frame.getContentPane().add(progressBar); 

     JButton btnNewButton = new JButton("Reset"); 
     btnNewButton.setBounds(10, 228, 89, 23); 
     frame.getContentPane().add(btnNewButton); 

     JButton button = new JButton("Run"); 
     button.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       Runnable update = new Runnable() 
       { 

        @Override 
        public void run() 
        { 
         for (int i = 1; i <= 100; i++) 
         { 
          final int val = i; 

          SwingUtilities.invokeLater(new Runnable() 
          { 
           public void run() 
           { 
            progressBar.setValue(val); 
            progressBar.repaint(); 
           } 

          }); 

          try 
          { 
           java.lang.Thread.sleep(100); 
          } 
          catch (InterruptedException e1) 
          { 
           // TODO Auto-generated catch block 
           e1.printStackTrace(); 
          } 
         } 
        } 
       }; 
       Thread t = new Thread(update); 
       t.start(); 
      } 
     }); 

     button.setBounds(109, 228, 89, 23); 
     frame.getContentPane().add(button); 

     btnNewButton.addActionListener(new ActionListener() 
     { 

      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       SwingUtilities.invokeLater(new Runnable() 
       { 

        @Override 
        public void run() 
        { 
         progressBar.setValue(0); 
         progressBar.repaint(); 
        } 
       }); 
      } 
     }); 

    } 
} 
+0

, поэтому мне нужно использовать две кнопки для запуска и сброса. Не могу я это сделать одним нажатием кнопки? или просто скрывать индикатор прогресса при его завершении и показывая кнопку при повторном запуске из начального состояния? –

Смежные вопросы