J'ai essayé de comprendre comment ajouter une barre de progression, je peux en créer un dans l'interface graphique que je suis implémentée et que je l'apparaisse, mais même après avoir vérifié sur http://docs.oracle.com/javase/tatutorial/uiswing/components/progress.html Je ne suis toujours pas plus clair sur Comment puis-je définir une méthode comme tâche afin que je puisse créer une barre de progression pour exécuter une méthode. S'il vous plaît quelqu'un peut-il essayer de m'expliquer cela ou de poster un exemple de barre de progression utilisé dans l'interface graphique avec une tâche étant définie comme méthode. Merci. P>
4 Réponses :
Votre question est un peu vague, mais cela me semble que vous voulez que la barre de progression montrent des progrès pour une méthode de course spécifique, que je vais appeler la méthode "Travail ()". Malheureusement, il n'ya aucun moyen de simplement transmettre une référence à votre méthode à une barre de progression - votre méthode doit explicitement indiquer à la barre de progression à laquelle s'afficher. Voici ce que je ferais: p>
Faites la référence de la barre de progression disponible pour travailler () - transmettez-la sous forme d'argument à travailler () ou de fournir une méthode d'accesseur que votre code dans Travail () peut appeler pour obtenir une référence à la progression. bar. p> li>
Inside Travail (), après avoir obtenu une référence à la barre de progression (que je vais appeler "PB", appelez pb.setminimum (0) et pb.setMaximum (n) où n est le Nombre d'étapes Votre méthode doit réussir. P> li>
Comme votre méthode termine chaque étape, appelez PB.setValue (PB.getvalue () + 1); P> LI>
à la fin de votre méthode, appelez PB.SetValue (0); Pour réinitialiser la barre de progression avant de retourner. p> li> ol>
De plus, si vous souhaitez que votre barre de progression affiche un message à chaîne, vous devez d'abord appeler PB.SetstringPainted (true), puis les appels suivants vers PB.SetString (String) apparaîtront à la barre de progression. P >
voir Ma réponse sur une autre question à la question qui comprend un exemple de Je suggérerais également de jeter un coup d'œil au Swing Concurrence Tutoriel Pour plus d'informations de fond sur les raisons pour lesquelles vous devez utiliser un Un exemple similaire que celui que j'ai posté est disponible dans le Swing Tutoriel sur JPROGRESSBAR CODE> Qui est mis à jour à l'aide d'un
SwingWorker code>. Le
swingworker Swing> est utilisé pour exécuter une tâche à exécution longue en arrière-plan (dans le cas de l'exemple, il s'agit simplement d'un fichier
régulier.sleep code>) et signalez sur la progression à certains intervalles. p>
swingworker code> lors de l'exécution des tâches à long terme qui interfèrent avec l'interface utilisateur. P>
JPROGRESSBAR CODE> S
, qu'il vaut également la peine d'être regardé p>
Peut-être que je peux vous aider avec un exemple de code:
Et ça,
jframe-> jbutton (limonlayout.north) p> li>
JFRAME-> JPANEL-> JPROGRESSBAR (BorderLayout.South) P> Li>
Vous pouvez ajouter une partie de bouton où que vous aimiez, par exemple lorsque progresse progressif = ...; état = vrai; progrès.waitfor (); état = faux; code> p>
private static void daa() {
//Frame
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(frame.getWidth() + 55, frame.getHeight() + 55);
//Button
JButton jButton = new JButton("State");
frame.add(jButton, BorderLayout.NORTH);
//Progress Bar
JProgressBar progressBar = new JProgressBar();
progressBar.setIndeterminate(true);
//Text for progress bar
JPanel panel = new JPanel(new BorderLayout());
panel.add(progressBar);
panel.add(new JLabel("Please wait......."), BorderLayout.PAGE_START);
//linking
panel.add(progressBar);
frame.add(panel, BorderLayout.SOUTH);
boolean[] state = {false};
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
state[0] = !state[0];
state();
}
private void state() {
if (state[0] == true) {
panel.hide();
} else {
panel.show();
}
}
});
}
Une des réponses dans ce projet de loi possible de peut Une barre de progression soit utilisée dans une classe extérieure principale? peut aider.
Je ne comprends pas. Pourquoi vous voulez Créer une barre de progression pour exécuter une méthode B> (comme vous l'avez dit)? L'objectif de la barre de progression est de fournir aux informations des utilisateurs sur une tâche en cours d'exécution. Donc, la tâche a dit à Oracle Doc se référer au fil qui gérera la barre de progression. Donc, créez votre barre de progression à l'aide d'un travailleur battant (comme indiqué dans votre lien), puis dans votre tâche (longue?) Mettez à jour la progression de la barre. La méthode
doinbackground () code> du swingworker est utilisée pour gérer la barre de progression. Je vous conseille de regarder à nouveau votre Oracle Tuto, expliquez-vous assez clairement et des exemples réutilisables. Bonne chance!