Bonjour !
Voilà, mon j'ai un problème avec JPanel, il n'affiche rien dynamiquement, par exemple, si je fais une boucle pour écrire 20 lignes dans un JTextArea, il va attendre la fin de la boucle, et afficher le JTextArea complet, mais impossible d'afficher l'écriture de chaque ligne à chaque itérations.
Le plus gros problème, c'est pour ma barre de progression, elle s'affiche vide, "freeze" le temps du remplissage, et s'affiche complète, sans état intermédiaire.
Voilà le code de la classe où intervient la JProgressBar:
Code :
- public class NOMCLASSE extends JFrame implements ActionListener{
-
- private JPanel pan;
- private JTextArea console;
- private JScrollPane consoleScroll;
- private JProgressBar loading;
- private JButton t;
-
- public NOMCLASSE(){
- this.setTitle("Nom fenêtre" );
- this.setSize(800,300);
- this.setLocationRelativeTo(null);
- this.setResizable(false);
- this.setVisible(true);
- pan = new JPanel();
- this.setContentPane(pan);
-
- console = new JTextArea("" );
- consoleScroll = new JScrollPane(console);
- consoleScroll.setPreferredSize(new Dimension(470,100));
- consoleScroll.setAutoscrolls(true);
- consoleScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
-
- loading = new JProgressBar(0, 10);
- loading.setPreferredSize(new Dimension(700,30));
- loading.setValue(0);
-
- pan.add(consoleScroll);
- pan.add(loading);
-
- t = new JButton("test" );
- t.addActionListener(this);
- pan.add(t);
- }
- public void actionPerformed(ActionEvent arg0) {
- if(arg0.getSource() == t){
- for(int i=0; i<10; i++){
- loading.setValue(i);
- /* Ici j'ai essayé de mettre un
- pan.repaint();
- ca ne changeais rien.
- */
- try {
- Thread.sleep(300);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
|
Je précise que cette fenêtre apparaît lorsqu'on clique sur un bouton de la fenêtre principale du programme, c'est donc une deuxième JFrame, peut être que cela pose un problème...
En conclusion, comment puis-je modifier les éléments du JPanel dynamiquement ?
Merci d'avance.