Modification éléments JPanel dynamiquement

Modification éléments JPanel dynamiquement - Java - Programmation

Marsh Posté le 20-05-2013 à 16:27:47    

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 :
  1. public class NOMCLASSE extends JFrame implements ActionListener{
  2.    
  3.     private JPanel pan;
  4.     private JTextArea console;
  5.     private JScrollPane consoleScroll;
  6.     private JProgressBar loading;
  7.     private JButton t;
  8.    
  9.     public NOMCLASSE(){
  10.         this.setTitle("Nom fenêtre" );
  11.         this.setSize(800,300);
  12.         this.setLocationRelativeTo(null);
  13.         this.setResizable(false);
  14.         this.setVisible(true);
  15.         pan = new JPanel();
  16.         this.setContentPane(pan);
  17.        
  18.         console = new JTextArea("" );
  19.         consoleScroll = new JScrollPane(console);
  20.         consoleScroll.setPreferredSize(new Dimension(470,100));
  21.         consoleScroll.setAutoscrolls(true);
  22.         consoleScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  23.        
  24.         loading = new JProgressBar(0, 10);
  25.         loading.setPreferredSize(new Dimension(700,30));
  26.         loading.setValue(0);
  27.        
  28.         pan.add(consoleScroll);
  29.         pan.add(loading);
  30.        
  31.         t = new JButton("test" );
  32.         t.addActionListener(this);
  33.         pan.add(t);
  34.     }
  35.     public void actionPerformed(ActionEvent arg0) {
  36.         if(arg0.getSource() == t){
  37.                 for(int i=0; i<10; i++){
  38.                     loading.setValue(i);
  39.                     /* Ici j'ai essayé de mettre un
  40.                         pan.repaint();
  41.                         ca ne changeais rien.
  42.                     */
  43.                     try {
  44.                         Thread.sleep(300);
  45.                     } catch (InterruptedException e) {
  46.                         e.printStackTrace();
  47.                     }
  48.                 }
  49.             }
  50.         }
  51. }


 
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.

Reply

Marsh Posté le 20-05-2013 à 16:27:47   

Reply

Marsh Posté le 30-05-2013 à 11:20:11    

Je te conseil de regarder vers les design patterns pour faire le JPanel dynamique et plus spécialement le design pattern Observeur-Observable.
 
Ton JPanel sera observeur et les les données seront observable. Dès que la données sera modifié, elle prévient l'observeur qui récupère les infirmations.


---------------
Mes vente
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed