Comment ajouter une barre de progression?


J'ai essayé de comprendre comment ajouter une barre de progression, je peux en créer une dans l'interface graphique que j'implémente et la faire apparaître, mais même après avoir vérifié http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html Je ne suis toujours pas plus clair sur la façon dont je peux définir une méthode comme tâche afin de pouvoir créer une barre de progression pour exécuter une méthode. S'il vous plait quelqu'un peut il essayer de m'expliquer cela ou poster un exemple d'une barre de progression utilisée dans l'interface graphique avec une tâche en cours en tant que méthode. Grâce.

Author: John, 2012-01-18

3 answers

Peut-être que je peux vous aider avec un exemple de code:

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) {
        ;
      }
    }
  }
}
 13
Author: endian, 2012-01-19 11:57:49

Votre question est un peu vague, mais il me semble que vous voulez que la barre de progression affiche la progression d'une méthode en cours d'exécution spécifique, que j'appellerai la méthode "work ()". Malheureusement, il n'y a aucun moyen de passer une référence à votre méthode à une barre de progression - votre méthode doit indiquer explicitement la barre de progression éléments à afficher. Voici ce que je ferais:

  1. Rendre la référence de la barre de progression disponible pour work () - soit la passer en tant qu'argument à work (), soit fournir un méthode d'accesseur que votre code dans le travail() permet d'obtenir une référence à la barre de progression.

  2. Dans work (), après avoir obtenu une référence à la barre de progression (que j'appellerai "pb", appelez pb.setMinimum (0) et pb.setMaximum (n) où n est le nombre d'étapes que votre méthode doit parcourir.

  3. Lorsque votre méthode termine chaque étape, appelez pb.setValue (pb.getValue()+1);

  4. À la fin de votre méthode, appelez pb.setValue (0); pour réinitialiser la barre de progression retourner.

De plus, si vous voulez que votre barre de progression affiche un message de chaîne, vous devez d'abord appeler pb.setStringPainted (true), puis les appels suivants à pb.setString (chaîne) apparaîtra sur la barre de progression.

 4
Author: CodeBlind, 2012-01-18 19:57:05

Voir ma réponse à une autre question SO qui comprend un exemple de JProgressBar qui est mis à jour en utilisant un SwingWorker. Le SwingWorker est utilisé pour exécuter une tâche longue en arrière-plan (dans le cas de l'exemple, il s'agit simplement d'un Thread.sleep régulier) et rendre compte de la progression à certains intervalles.

Je suggère également fortement de jeter un oeil auSwing concurrency tutorial pour plus d'informations sur les raisons pour lesquelles vous devriez utiliser un SwingWorker lors de l'exécution de tâches de longue durée qui interfèrent avec l'interface utilisateur.

Un exemple similaire à celui que j'ai posté est disponible dans le Tutoriel Swing sur JProgressBar s , qu'il vaut également la peine de regarder

 2
Author: Robin, 2017-05-23 11:46:59