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

Agents de placement/Fenêtres Java Discussion :

Déroulage d'une jdialog


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut Déroulage d'une jdialog
    Bonjour,

    je souhaite créer un bouton qui permet de faire dérouler le jdialog (sa longueur augmente progressivement).

    Pour cela, j'ai utilisé un thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	while(this.dialog.getWidth() < 700) {
    			try {
    				this.dialog.repaint();				this.dialog.setSize(this.dialog.getWidth()+1,this.dialog.getHeight());
    				this.dialog.setLocationRelativeTo(null);
     
    			} catch(Exception e) { }
    			try {
    				Thread.sleep(1/10);
    			} catch(Exception e) { }
    		}
    	}
    Ca marche, la fenêtre se déroule correctement, mais pendant tout ce temps la partie qui se dévoile est bleu. Ce n'est que à la fin qu'elle s'affiche avec la bonne couleur.

    Comment résoudre ce problème ?

  2. #2
    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
    Quand tu fais ceci tu violes l'EDT, c'est à dire que tu fais des opération modifiant un composant depuis un autre thread que celui destiné à gérér les modification graphiques. Pour plus d'infos réfères toi au tuto suivant: http://gfx.developpez.com/tutoriel/j...ing-threading/

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    J'ai regardé le lien, et j'ai donc essayé plusieurs chose, mais ca ne fonctionne toujours pas.

    J'ai essayé (entre autres) :

    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
    package main;
     
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
     
    public class Thread extends java.lang.Thread {
     
    	private JFrame frame;
     
    	public Thread(JFrame frame) {
    		this.frame = frame;
    	}
     
    	public void run() {
    		final JFrame frame = this.frame;
     
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				while(frame.getWidth() < 700) {
    					try {		
    						frame.setSize(frame.getWidth()+1,frame.getHeight());
    						frame.setLocationRelativeTo(null);
     
    					} catch(Exception e) { }
    					try {
    						Thread.sleep(1/10);
    					} catch(Exception e) { }
    				}
    			}
    		});
    	}
     
    }
    J'utilise invokeLater, donc si j'ai bien compris, l'EDT n'est pas violé.
    D'ou vient le problème alors ?

  4. #4
    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
    Tu ne rends pas la main à l'EDT puisque tu effectues toutes tes opérations au sein d'une boucle. Il te faut utiliser un javax.swing.Timer

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    J'ai regarde Timer, et je fais donc :

    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
    package main;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;
     
    public class DeroulageListener implements ActionListener {
     
    	private JFrame frame;
    	private Timer timer;
     
    	public DeroulageListener(JFrame frame) {
    		this.frame = frame;
    		this.timer = new Timer(0,this);
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		this.timer.start();
    		if (this.frame.getWidth() < 700 )
    			this.frame.setSize(this.frame.getWidth()+1,this.frame.getHeight());
     
     
    	}
     
    }
    Le problème n'apparait plus, mais la vitesse de deroulage est assez lente. J'ai beau changer le premier argument lors de la construction de timer, il ne va jamais assez vite. Comment augmenter la vitesse ?

  6. #6
    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
    Essaie comme ceci :
    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
    public class DeroulageListener implements ActionListener {
     
    	private JFrame frame;
    	private Timer timer;
     
    	public DeroulageListener(JFrame frame) {
    		this.frame = frame;
    		this.timer = new Timer(10,this);
    		this.timer.start();
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if (frame.getWidth() < 700 )  {
                       frame.setSize(frame.getWidth()+1,frame.getHeight());
                    } else {
                       timer.stop();
                    }
    	}
     
    }

Discussions similaires

  1. Bug dans une JDialog et son Icone
    Par Spinoza23 dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 07/02/2007, 12h16
  2. [debutant]probleme de recupération de données saisies dans une JDialog
    Par melodie53 dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 07/08/2006, 16h32
  3. [JDialog] Durée de vie et mort d'une JDialog
    Par calogerogigante dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 08/05/2006, 17h52
  4. [JDialog] Icône d'une JDialog (bug Java or not ?)
    Par Oliveuh dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 22/07/2005, 12h03
  5. Accès à une JDialog bloqué à cause d'un setModal()
    Par seiryujay dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 21/07/2005, 14h39

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