2012-01-18 6 views
3

Я пытаюсь понять, как добавить индикатор выполнения, я могу создать его в графическом интерфейсе, который я реализую, и получить его, но даже после проверки через http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html. Я все еще не понимаю, как я могу установить метод как чтобы я мог создать индикатор выполнения для запуска метода. Пожалуйста, кто-нибудь попытается объяснить это мне или опубликует пример индикатора выполнения, который используется в графическом интерфейсе, при задании, заданном как метод. Благодарю.Как добавить индикатор выполнения?

+1

Один из ответа на этот возможный дубликат [Может ли индикатор выполнения быть использован в классе за пределами основного?] (http://stackoverflow.com/questions/4637215/can-a-progress-bar-be-used-in-a-class-outside- основной) может помочь. – trashgod

+0

Не понимаю. Почему вы хотите ** создать индикатор выполнения для запуска метода ** (как вы сказали)? Целью индикатора выполнения является предоставление пользовательской информации о выполняемой задаче. Таким образом, задача, указанная в документе oracle doc, относится к потоку, который будет управлять индикатором выполнения. Итак, создайте свой индикатор выполнения, используя swing worker (как указано в вашей ссылке), а затем в вашей (длинной?) Задаче обновите ход бара. Метод 'doInBackground()' SwingWorker используется для управления индикатором выполнения. Я советую вам снова взглянуть на ваш балет оракула, объяснение довольно ясное и примеры повторного использования. Удачи! –

ответ

11

Может быть, я могу помочь вам с некоторыми примерами кода:

public class SwingProgressBarExample extends JPanel { 

    JProgressBar pbar; 

    static final int MY_MINIMUM = 0; 

    static final int MY_MAXIMUM = 100; 

    public SwingProgressBarExample() { 
    // initialize Progress Bar 
    pbar = new JProgressBar(); 
    pbar.setMinimum(MY_MINIMUM); 
    pbar.setMaximum(MY_MAXIMUM); 
    // add to JPanel 
    add(pbar); 
    } 

    public void updateBar(int newValue) { 
    pbar.setValue(newValue); 
    } 

    public static void main(String args[]) { 

    final SwingProgressBarExample it = new SwingProgressBarExample(); 

    JFrame frame = new JFrame("Progress Bar Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setContentPane(it); 
    frame.pack(); 
    frame.setVisible(true); 

    // run a loop to demonstrate raising 
    for (int i = MY_MINIMUM; i <= MY_MAXIMUM; i++) { 
     final int percent = i; 
     try { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
      it.updateBar(percent); 
      } 
     }); 
     java.lang.Thread.sleep(100); 
     } catch (InterruptedException e) { 
     ; 
     } 
    } 
    } 
} 
4

Ваш вопрос немного расплывчатый, но мне кажется, что вы хотите, чтобы индикатор выполнения показывал прогресс для определенного метода работы, который я назову методом «work()». К сожалению, нет способа просто передать ссылку на ваш метод на индикатор выполнения - ваш метод должен явно указывать индикатор выполнения, что показывать. Вот что я хотел бы сделать:

  1. сделать ссылки прогресс бар, имеющихся в наличии для работы() - либо передать его в качестве аргумента для работы(), или предоставить акцесора, что ваш код в работе() может вызывать чтобы получить ссылку на индикатор выполнения.

  2. Внутри работы(), после того как вы получили ссылку на индикатор выполнения (который я назову «pb», вызовите pb.setMinimum (0) и pb.setMaximum (n), где n - это число . шаги ваш метод должен пройти через

  3. Как ваш метод завершает каждый шаг, вызовите pb.setValue (pb.getValue() + 1);

  4. в конце вашего метода, вызовите Pb. setValue (0), для сброса индикатора выполнения перед возвратом.

, если вы хотите, чтобы ваш индикатор выполнения отображал сообщение String, вам сначала нужно вызвать pb.setStringPainted (true), а затем последующие вызовы pb.setString (строка) будут отображаться на панели выполнения.

2

См. my answer on another SO question, который содержит пример JProgressBar, который обновляется с использованием SwingWorker. SwingWorker используется для выполнения долгого задания в фоновом режиме (в случае примера это просто обычный Thread.sleep) и сообщать о ходе через определенные промежутки времени.

Я также настоятельно рекомендую взглянуть на Swing concurrency tutorial для получения дополнительной информации о том, почему вы должны использовать SwingWorker при выполнении длительных задач, которые мешают пользовательскому интерфейсу.

Аналогичный пример, как один я отправил доступен в Swing tutorial about JProgressBars, который также стоит посмотреть на

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