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] Pas de remplissage


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut [JProgressBar] Pas de remplissage
    Hello

    Voici mon problème. Annexement (? pas sûr de ce mot) à ma fenêtre principale, je crée une fenêtre secondaire où je demande à l'utilisateur de faire un choix. Une fois son choix fait, il doit cliquer sur un bouton pour valider son choix et un calcul s'effectue. Pendant ce calcul, j'affiche une fenêtre de dialogue modale qui contient un JProgressBar. Seulement, je ne vois pas ma JProgressBar, ni même qu'elle se remplit. Voici le code de ma fenêtre de dialogue contenant ma JProgressBar:
    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
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Toolkit;
     
    import javax.swing.JPanel;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JProgressBar;
     
    public class WaitDialog extends JDialog {
     
    	private JPanel jContentPane = null;
    	private JLabel jLabel = null;
    	public JProgressBar jProgressBar = null;
     
    	public WaitDialog() {
    		super();
    		initialize();
    	}
     
    	private void initialize() {
    		this.setSize(300, 200);
    		this.setTitle("Processing");
    		this.setContentPane(getJContentPane());
    		this.setModal(true);
    		this.pack();
    		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		this.setLocation((screenSize.width - 512) / 2, (screenSize.height - 512) / 2);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		this.setDefaultLookAndFeelDecorated(false);
    	}
     
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jLabel = new JLabel();
    			jLabel.setText("Please, wait while procesing");
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BorderLayout());
    			jContentPane.add(jLabel, java.awt.BorderLayout.NORTH);
    			jContentPane.add(getJProgressBar(), java.awt.BorderLayout.CENTER);
    		}
    		return jContentPane;
    	}
     
    	private JProgressBar getJProgressBar() {
    		if (jProgressBar == null) {
    			jProgressBar = new JProgressBar();
    			jProgressBar.setStringPainted(true);
    			jProgressBar.setMinimum(0);
    			jProgressBar.setMaximum(100);
    		}
    		return jProgressBar;
    	}
     
    }
    Et voici comment je la remplit:
    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
     
    WaitDialog wait = new WaitDialog();
    String s = (String)OntologyChooser.jComboBox.getSelectedItem();
    SearchOntology so = new SearchOntology(s);
    Iterator i = Makanko.proteinList.iterator();
    int size = Makanko.proteinList.size();
    int cpt = 0;
    while(i.hasNext()){
    		Protein protein = (Protein)i.next();
    		cpt++;
    		int nb = (int)((cpt*100)/size);
    		System.out.println(""+protein.nom+" "+nb);
    		wait.jProgressBar.setValue(nb);
    		protein.geneontology_accession = so.getOntologyProtein(protein.nom);
    		if(protein.geneontology_accession.compareTo("")!=0){
    			protein.ontology_definition = so.getOntologyDefinition(protein.geneontology_accession);
    		}
    wait.setVisible(false);
    wait.dispose();
    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    En fait, si tu fais ta boîte de dialogue modale, le code du calcul de remplissage de ta JProgressBar ne sera pas exécuté tant qu'elle sera ouverte. En enlevant le
    tu devrait résoudre ton problème.
    Tu peux essayer de le remplacer par setAlwaysOnTop(true);

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Bonjour aDamas

    J'ai essayé ta solution. Mon seul problème est qu'à présent, Il ne me semble pas voir ma JProgressBar pendant le remplissage. Je ne l'aperçois à la fin, une fois que tout est achevé. Comment se fait-il que je ne la vois pas entre temps ?

    Merci d'avance de ta réponse ainsi que celles des autres forumeurs.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre expérimenté Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Par défaut
    Peut-être qu'elle se rempli trop vite?

    Comme je n'ai pas les classes nécessaires au fonctionnement de ton programme, j'ai utilisé un timer qui incrémente tout les 100ms la JProgressBar et cela fonctionne parfaitement.

  5. #5
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Ca m'étonne .
    Bon, ou alors, il me reste à mettre le programme en pause pendant 0.1s à chaque tour de boucle.

    Merci à toi de tes renseignements.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ba c'est du propre ça, volontairement ralentir son programme............ptr

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Tu le mets ou le code de remplissage ? Dans un thread ?

  8. #8
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Citation Envoyé par Gfx
    Tu le mets ou le code de remplissage ? Dans un thread ?
    Non, justement. Je lis une liste N d'éléments et lis un fichier du type banque de données biologique". Donc pour chaque éléments évalués, je fais monter la valeur de mon JProgressBar. Pour Sinok, je suis d'accord, je ne veux point arriver à une telle extrêmité 8) .

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  9. #9
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Quel thread exécute le code suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WaitDialog wait = new WaitDialog(); 
    String s = (String)OntologyChooser.jComboBox.getSelectedItem(); 
    SearchOntology so = new SearchOntology(s); 
    ...
    Je pense qu'il s'agit de l'EDT (Event Dispatch Thread), le thread en charge de traiter les événements graphiques. Tant que tu exécutes du code dans ce thread, tu ne peux lui rendre la main pour qu'il "dépile" les événements, et donc la réactualisation de l'affichage de la progress bar ne sera pas réalisée en temps réel.
    Je te suggère de créer un thread dédié pour exécuter le code de chargement.

  10. #10
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Citation Envoyé par herve91
    Quel thread exécute le code suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WaitDialog wait = new WaitDialog(); 
    String s = (String)OntologyChooser.jComboBox.getSelectedItem(); 
    SearchOntology so = new SearchOntology(s); 
    ...
    Je pense qu'il s'agit de l'EDT (Event Dispatch Thread), le thread en charge de traiter les événements graphiques. Tant que tu exécutes du code dans ce thread, tu ne peux lui rendre la main pour qu'il "dépile" les événements, et donc la réactualisation de l'affichage de la progress bar ne sera pas réalisée en temps réel.
    Je te suggère de créer un thread dédié pour exécuter le code de chargement.
    Ok, et bien ce sera une excellente occasion de revoir cette notion que j'ai un peu oublié depuis, les threads en Java
    Direction la

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

Discussions similaires

  1. [JProgressBar] pas d'update visuel
    Par kiwizm dans le forum Composants
    Réponses: 3
    Dernier message: 15/05/2009, 05h49
  2. J'arrive pas à utiliser JProgressBar !
    Par med_anis_dk dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/06/2007, 07h22
  3. [vs2003,C#] remplissage d'un datagrid pas a pas
    Par philo71 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/10/2006, 17h12
  4. Réponses: 11
    Dernier message: 04/08/2006, 11h07
  5. JProgressBar pas remplie
    Par louby dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/06/2006, 15h03

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