IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[JProgressBar] Problème affichage lookandfeel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut [JProgressBar] création look&Feel xml pour une JProgressBar
    Bonsoir,

    Je suis actuellement entrain de créer des statistiques dont le format de sorti est le PDF. Donc je souhaite passer la création dans un thread.

    Cela fonctionne niquel.

    Alors la seconde étape est de montrer à l'utilisateur l'état d'avancement de la création de rapport. Alors j'ai créer une class MaProgressBar.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    package outils;
     
    import javax.swing.JProgressBar;
    import javax.swing.JSlider;
    import javax.swing.SwingWorker;
     
    public class MaProgressBar extends JProgressBar{
     
    	private Move move = null;
    	private JSlider sb = null ;
     
    	public MaProgressBar(){
    		super(0,100);
    		sb =  new JSlider(JSlider.HORIZONTAL, 0, 100, 60);
    		sb.setValue(0);
    		sb.setPaintTicks(true);
    		sb.setMajorTickSpacing(20);
    		sb.setMinorTickSpacing(5);
    		this.setModel(sb.getModel());
    		this.setValue(0);
    	}
     
    	public void setVisible(boolean b) {
            if (b) {
                if (move == null) {
                    move = new Move();
                    move.start();
                }
            } else {
                if (move != null) {
                    move.end();
                    move = null;
                }
            }
            super.setVisible(b);
        }
     
    	public JProgressBar getProgress(){
    		return this;
    	}
     
    	private class Move extends Thread {
            private boolean end = false;
     
            public void run() {
                try {
                    while (!end) {
                        sleep(10);
                        if (getProgress().getValue() < getProgress().getMaximum())
                            getProgress().setValue(getProgress().getValue() + 1);
                        else {
                            getProgress().setValue(0);
                        }
                        repaint();
                    }
                } catch (InterruptedException e) {
                    end();
                }
            }
            public void end() {
                this.end = true;
            }
    	}
    }

    Ensuite lors du clique sur un bouton je lance la création de rapport et j'initialise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaProgressBar.setVisible(true);
    Puis à la fin de la création du rapport j'initialise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaProgressBar.setVisible(false);
    Voici le thread lancé lors du clique


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    btnLancerStat.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent aevt){
    				new Thread() {
    	                                 public void run() {
    			                             MaProgressBar.setVisible(true);
                                                         fonctionCreationRapport();
        		                                     MaProgressBar.setVisible(false);
    	                                 }
    	                        }.start();
     
    		});

    Et cela ne m'affiche pas la MaProgressBar

    Si quelqu'un à une idée elle est la bienvenue


    Merci d'avance,

    Cordialement,

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    salut ,

    je pense que tu n'a pas attacher ta progressbar à un JFrame ou un JPanel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JFrame frameProgressBar=new JFrame();
    frameProgressBar.getContentPane.add(MaProgressBar)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    Je viens de tester tous les threads de lancé donc Move et mon thread de création et cela fonctionne bien. Cela s'arrête au bon moment. Et le thread Move fonctionne très bien. Il se bien lance quand :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaProgressBar.setVisible(true);
    et s'arrête bien quand :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaProgressBar.setVisible(false);
    Donc c'est un problème d'affichage .



  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    Si si, je l'ajoute à la place d'un ancien JLabel qui affichait du texte donc il est bien ajouter au JPanel qui lui est ajouté à ma JFrame

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    Je viens de tester un truc qui ne donne pas grand chose :

    Voici les modifications faites :

    La méthode setVisible() de la class MaProgressBar est enlevée.

    Ensuite dans le thread de lancement de création de rapport :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    new Thread() {
    	                public void run() {
     
    	                	MaProgressBar.setVisible(true);
     
    	                	for(int i = 0; i<10;i++){
     
    	                		MaProgressBar.setValue(i * 10);
    	                		MaProgressBar.repaint();
    	                		repaint();
     
    	                		System.out.println(i * 10);
    	                		try{   		            	
    	    		            	      sleep(2000);
    	    		                 }catch(Exception e){
    	    		            	      System.out.println("echec");
    	    		                }
    	                         }
     
                                     MaProgressBar.setVisible(false);
                           }
    }.start();

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    Alors je viens te tester ma class en créer dans cette class une méthode main que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public static void main(String[] s){
    		JFrame f = new JFrame("test");
    		final MaProgressBar mpb = new MaProgressBar();
    		JPanel jp = new JPanel();
     
    		f.getContentPane().add(mpb);
    		f.setVisible(true);
    		f.setLayout(new BorderLayout());
    		f.setBounds(0, 0, 200, 100);
    		jp.add(mpb);
    		f.add(jp,BorderLayout.CENTER);
     
    		mpb.setVisible(true);
    		new Thread(){
    			public void run(){
    				try{
    					sleep(5000);
    				}catch(Exception e){
    					System.out.println("echec");
    				}
    				mpb.setVisible(false);
    			}
    		}.start();
    	}
    Et cela fonctionne impeccable, ma progresse bar s'affiche et progresse lol.

    Ma question est donc la suivante :

    Est-ce qu'un objet non référencé dans le look and feel a des effets sur son affichage ??

  7. #7
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    repaint() est inutile, un setValue(...) suffit.

    La progression du JProgressBar doit se faire dans l'EDT, et pas dans un autre Thread.

    Pourquoi ne pas utiliser un SwingWorker qui simplifie tout ça ?

Discussions similaires

  1. Problème affichage JProgressBar/Thread/.bat
    Par davly dans le forum Général Java
    Réponses: 3
    Dernier message: 13/03/2012, 09h59
  2. Problème affichage JProgressBar
    Par bibi7373 dans le forum Composants
    Réponses: 0
    Dernier message: 17/02/2012, 15h13
  3. Problème affichage primitive
    Par goutbouyo dans le forum DirectX
    Réponses: 4
    Dernier message: 29/12/2004, 18h25
  4. [Plugin][VE] Problème affichage
    Par sebb84 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/07/2004, 14h50
  5. [DOS] Problème affichage de DOS dans un Memo
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 25/06/2004, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo