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

Composants Java Discussion :

[ListSelectionListener] comment utiliser les threads?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut [ListSelectionListener] comment utiliser les threads?
    Bonjour,

    J'ai développé une application avec une interface graphique qui contient (entre autres) une JList dans un JScrollPane.
    Quand on sélectionne une ligne de la liste, l'image correspondante doit s'afficher dans un JPanel et une barre de status est mise à jour.

    J'ai obtenu le résultat que j'attendais en implémentant le ListSelectionListener suivant :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    /**
     * Projet : LAM
     * Paquetage : fr.statlife.LAM.IHM
     * Fichier : MammoSelectionListener.java
     *
     * @author Mathilde Pellerin
     * @date 12 mai 2010
     */
    package fr.statlife.LAM.IHM;
     
    import java.awt.Color;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
     
    import fr.statlife.LAM.Controleur;
    import fr.statlife.LAM.Image;
     
    /**
     * 
     * @author Mathilde Pellerin
     */
    public class MammoSelectionListener implements ListSelectionListener
    {
    	private JList liste;
    	private FenetreLAM fenetre;
    	private Controleur control;
     
    	public MammoSelectionListener(FenetreLAM fenetre)
    	{
    		this.liste = fenetre.getListeMammos();
    		this.control = fenetre.getControl();
    		this.fenetre = fenetre;
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
    	 */
    	@Override
    	public void valueChanged(ListSelectionEvent e)
    	{
    		//Le listener etant toujours appele avant de selectionner l'element pour ajustement
    		// on s'assure que la selection est bien faite avant de lancer le traitement
    		if(!e.getValueIsAdjusting())
    		{
    			Object[] mammosSelectionnees = liste.getSelectedValues();
    			if(mammosSelectionnees.length == 1)
    			{
    				Mammo mammoSelectionnee = (Mammo)mammosSelectionnees[0];
    				String nomMammo = mammoSelectionnee.getNom();
    				Image[] images = control.afficherMammo(nomMammo);
     
    				//Affichage de la mammographie native
    				fenetre.getPanneauMammoNative().setImg(images[0].getImage());
    				fenetre.getStatusNative().setText("Mammographie : "+nomMammo);
     
    				String etatMammo = control.getEtatMammo(nomMammo);
     
     
    				//Recuperation de la barre de status analysee
    				JLabel statusAnalysee = fenetre.getStatusAnalysee(); 
     
    				if(etatMammo.equals("EnAttenteAnalyse"))
    				{
    					fenetre.getPanneauMammoAnalysee().setImg(null);
    					statusAnalysee.setText("Mammographie en attente d'analyse");
     
    					statusAnalysee.setBackground(Color.white);
     
    					fenetre.getBoutonValidation().setVisible(false);
    					fenetre.getBoutonInvalidation().setVisible(false);
    				}
    				else
    				{
    					fenetre.getPanneauMammoAnalysee().setImg(images[1].getImage());
     
    					if(etatMammo.equals("EnAttenteValidation"))
    					{
    						statusAnalysee.setText("Densité mammaire : "
    								+ control.getDensite(nomMammo)+"%");
     
    						statusAnalysee.setBackground(Color.white);
     
    						JButton valide = fenetre.getBoutonValidation();
    						valide.setVisible(true);
    						valide.setName(nomMammo);
     
    						JButton invalide = fenetre.getBoutonInvalidation();
    						invalide.setVisible(true);
    						invalide.setName(nomMammo);
    					}
    					else if(etatMammo.equals("Valide"))
    					{
    						statusAnalysee.setText("Densité mammaire : "
    								+ control.getDensite(nomMammo)+"%");
     
    						statusAnalysee.setBackground(MammoCellRenderer.couleurValide);
     
    						fenetre.getBoutonValidation().setVisible(false);
    						fenetre.getBoutonInvalidation().setVisible(false);
    					}
    					else if(etatMammo.equals("Invalide"))
    					{
    						statusAnalysee.setText("Densité mammaire : "
    								+ control.getDensite(nomMammo)+"%. Invalidée.");
     
    						statusAnalysee.setBackground(MammoCellRenderer.couleurInvalide);
     
    						fenetre.getBoutonValidation().setVisible(false);
    						fenetre.getBoutonInvalidation().setVisible(false);	
    					}
    				}
    			}
    		}
    	}
    }
    maintenant que je teste l'appli avec une liste un peu plus grande que celle utilisée pour les premiers tests, je me rends compte que lors de la première sélection, l'application se fige quelques instants. J'ai lu pas mal de posts et de tutos à ce sujet et je pense que ça vient du fait que je n'utilise pas de thread dans mon listener, et que le traitement que je pensais rapide est plus long que prévu et bloque l'EDT.

    Le problème, c'est que je n'arrive pas à régler le problème justement : j'ai un peu de mal avec les threads, et malgré plusieurs lectures du tuto de GFX, je ne vois pas bien ce qu'il faut que je fasse :
    faut-il appeler la méthode invokeLater du SwingUtilities pour chaque mise à jour de l'interface (auquel cas ça rajoute un paquet monstrueux de codes, c'est pour ça que je n'ai pas encore testé cette solution)?
    ou faut-il que je fasse un nouveau thread juste pour l'appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image[] images = control.afficherMammo(nomMammo);
    qui ne me semble pas particulièrement long, mais bon, comme c'est des images, ça prend peut être plus de temps que je ne crois?...
    J'ai essayé cette dernière solution sans succès (à cause des variables qu'il faut mettre en final...)

    Bref, je galère un peu là
    Merci d'avance pour tout conseil ou doc que j'aurais loupé.

  2. #2
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    bon, après avoir posté, j'ai fait un nouvel essaie en essayant de suivre le tuto de GFX :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    /**
     * Projet : LAM
     * Paquetage : fr.statlife.LAM.IHM
     * Fichier : MammoSelectionListener.java
     *
     * @author Mathilde Pellerin
     * @date 12 mai 2010
     */
    package fr.statlife.LAM.IHM;
     
    import java.awt.Color;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.SwingUtilities;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
     
    import fr.statlife.LAM.Controleur;
    import fr.statlife.LAM.Image;
     
    /**
     * 
     * @author Mathilde Pellerin
     */
    public class MammoSelectionListener implements ListSelectionListener
    {
    	private JList liste;
    	private FenetreLAM fenetre;
    	private Controleur control;
     
    	public MammoSelectionListener(FenetreLAM fenetre)
    	{
    		this.liste = fenetre.getListeMammos();
    		this.control = fenetre.getControl();
    		this.fenetre = fenetre;
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
    	 */
    	@Override
    	public void valueChanged(ListSelectionEvent e)
    	{
    		//Le listener etant toujours appele avant de selectionner l'element pour ajustement
    		// on s'assure que la selection est bien faite avant de lancer le traitement
    		if(!e.getValueIsAdjusting())
    		{
    			final Object[] mammosSelectionnees = liste.getSelectedValues();
    			if(mammosSelectionnees.length == 1)
    			{
    				//Affichage de la mammographie native
    				new Thread(new Runnable() {
    					public void run() {
    						Mammo mammoSelectionnee = (Mammo)mammosSelectionnees[0];
    						final String nomMammo = mammoSelectionnee.getNom();
    						final Image[] images = control.afficherMammo(nomMammo);
    						SwingUtilities.invokeLater(new Runnable() {
     
    							@Override
    							public void run()
    							{
    								fenetre.getPanneauMammoNative().setImg(images[0].getImage());
    								fenetre.getStatusNative().setText("Mammographie : "+nomMammo);
     
    								String etatMammo = control.getEtatMammo(nomMammo);
     
     
    								//Recuperation de la barre de status analysee
    								JLabel statusAnalysee = fenetre.getStatusAnalysee(); 
     
    								if(etatMammo.equals("EnAttenteAnalyse"))
    								{
    									fenetre.getPanneauMammoAnalysee().setImg(null);
    									statusAnalysee.setText("Mammographie en attente d'analyse");
     
    									statusAnalysee.setBackground(Color.white);
     
    									fenetre.getBoutonValidation().setVisible(false);
    									fenetre.getBoutonInvalidation().setVisible(false);
    								}
    								else
    								{
    									fenetre.getPanneauMammoAnalysee().setImg(images[1].getImage());
     
    									if(etatMammo.equals("EnAttenteValidation"))
    									{
    										statusAnalysee.setText("Densité mammaire : "
    												+ control.getDensite(nomMammo)+"%");
     
    										statusAnalysee.setBackground(Color.white);
     
    										JButton valide = fenetre.getBoutonValidation();
    										valide.setVisible(true);
    										valide.setName(nomMammo);
     
    										JButton invalide = fenetre.getBoutonInvalidation();
    										invalide.setVisible(true);
    										invalide.setName(nomMammo);
    									}
    									else if(etatMammo.equals("Valide"))
    									{
    										statusAnalysee.setText("Densité mammaire : "
    												+ control.getDensite(nomMammo)+"%");
     
    										statusAnalysee.setBackground(MammoCellRenderer.couleurValide);
     
    										fenetre.getBoutonValidation().setVisible(false);
    										fenetre.getBoutonInvalidation().setVisible(false);
    									}
    									else if(etatMammo.equals("Invalide"))
    									{
    										statusAnalysee.setText("Densité mammaire : "
    												+ control.getDensite(nomMammo)+"%. Invalidée.");
     
    										statusAnalysee.setBackground(MammoCellRenderer.couleurInvalide);
     
    										fenetre.getBoutonValidation().setVisible(false);
    										fenetre.getBoutonInvalidation().setVisible(false);	
    									}
    								}
    							}
    						});
    					}
    				}).start();
    			}
    		}
    	}
    }
    c'est un peu mieux, mais ce n'est pas encore ça : l'application ne se bloque plus, mais l'affichage des images dans les JPanel est assez lent. Ce qui fait qu'on peut cliquer rapidement sur 3 lignes différentes, il y a un temps avant l'affichage des images puis elles s'affichent les 3 à la suite de l'autre...
    Ce qui finit par bouffer la mémoire de Java et générer des erreurs :
    Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space
    at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:42)
    at java.awt.image.Raster.createInterleavedRaster(Raster.java:253)
    at java.awt.image.BufferedImage.<init>(BufferedImage.java:368)
    Y'a-t-il un moyen pour qu'il n'essaie d'afficher que la dernière cliquée?

    Cela dit, mon code est-il correct ? (J'essaie de faire au mieux, mais je pressens que c'est pas encore ça )

  3. #3
    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
    Ton code est surtout vachement "pesant", très voir trop lourd lourd pour ne pas tourner en rond.

    Un très bon conseil pour toi serait de t'intéresser à la classe SwingWorker qui simplifie amplement la gestion des Threads en Swing.
    En fait le but est de découper, désengorger ton code car là tu va vite accumuler les couches, les Runnable et autres classes anonymes tendant à rendre un code légèrement verbeux .

    http://rom.developpez.com/java-swingworker/

    Accessoirement quelle est la taille de tes images? Car il faut bien comprendre qu'en mémoire les images sont décompressées et de fait pèsent beaucoup plus lourd que le poids de l'image sur ton disque.

  4. #4
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    merci de ta réponse.

    En avançant une autre partie de l'application j'ai utilisé SwingWorker et je comptais justement reprendre cette partie avec

    Faut juste que je trouve quelle partie mettre dans le doInBackground...

    En fait, j'affiche 2 types d'images: des images "natives" que je ne peux pas modifier et des images réduites et analysées. Les images natives sont au format bmp et pèsent dans les 5-6 Mo, ce qui explique le temps de chargement je pense. Les images retravaillées pourront être en bmp ou en jpg dans un premier temps et sont beaucoup plus petites (moins d'1 Mo). L'affichage de celles-ci ne pose pas de problème.

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    En fait, le problème, c'est que je ne sais pas quoi mettre dans le SwingWorker. Car ce qui est long, c'est l'affichage en lui même, donc une partie censée être faite par l'EDT.

    à mon avis, la partie bloquante du code est celle là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre.getPanneauMammoNative().setImg(images[0].getImage());
    et la méthode correspondante se situe dans la classe étendant JPanel que j'ai créé pour afficher les images :
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /**
     * Projet : LAM
     * Paquetage : fr.statlife.LAM.IHM
     * Fichier : PanneauMammo.java
     *
     * @author Mathilde Pellerin
     * @date 11 mai 2010
     */
    package fr.statlife.LAM.IHM;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.BorderFactory;
    import javax.swing.JPanel;
     
    import fr.statlife.LAM.Image;
     
    /**
     * 
     * @author Mathilde Pellerin
     */
    @SuppressWarnings("serial")
    public class PanneauMammo extends JPanel
    {
    	private BufferedImage img;
    	private BufferedImage fondBlanc;
     
    	public PanneauMammo()
    	{
    		super();
    		try
    		{
    			this.fondBlanc = ImageIO.read(new File("./pointBlanc.gif"));
    		} 
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
     
    		this.img = fondBlanc;
    		this.setBorder(BorderFactory.createLineBorder(Color.black));
    	}
     
    	public PanneauMammo(Image img)
    	{
    		super();
    		this.img = img.getImage();
    	}
     
     
    	/**
             * permet de dessiner la mammo dans un panneau (JPanel)
             */
    	public void paintComponent(Graphics g)  
    	{
    		g.drawImage(img, 1, 1, this.getWidth(), this.getHeight(), null);
    	}
     
     
    	/**
             * ACCESSEURS
             */
     
    	public BufferedImage getImg()
    	{
    		return img;
    	}
     
    	public void setImg(BufferedImage image)
    	{
    		if(image == null)
    			this.img = fondBlanc;
    		else
    			this.img = image;
     
    		paintComponent(this.getGraphics());
    	}
    }
    toute suggestions pour m'aider à déméler qu'est ce qui doit être où seront les bienvenues...

  6. #6
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Bon, j'ai viré le thread anonyme, et j'ai refondue le code pour qu'il soit plus clair et moins redondant.

    Comme il y a d'autre cas où des images devront être affiché, j'ai créé une nouvelle méthode dans la classe correspondante.
    Du coup, dans le listener, je n'ai gardé qu'un appel à cette nouvelle méthode d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void valueChanged(ListSelectionEvent e)
    	{
    		//Le listener etant toujours appele avant de selectionner l'element pour ajustement
    		// on s'assure que la selection est bien faite avant de lancer le traitement
    		if(!e.getValueIsAdjusting())
    		{
    			Object[] mammosSelectionnees = liste.getSelectedValues();
    			if(mammosSelectionnees.length == 1)
    			{
    				Mammo mammoSelectionnee = (Mammo)mammosSelectionnees[0];
    				mammoSelectionnee.afficherMammo(fenetre);
    			}
    		}
    	}
    La nouvelle méthode d'affichage contient l'ancien code sans le thread (que je rajouterais après quand j'aurais démélé cette histoire de SwingWorker ) mais là aussi, je l'ai renfondue un peu :
    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
    	protected void afficherMammo(FenetreLAM fenetre)
    	{
    		Controleur control = fenetre.getControl();
     
    		//Recuperation des infos sur la mammo (nom, etat, images)
    		String nomMammo = this.getNom();
    		Image[] images = control.afficherMammo(nomMammo);
    		String etatMammo = control.getEtatMammo(nomMammo);
     
    		//Affichage de la mammographie native
    		fenetre.getPanneauMammoNative().setImg(images[0].getImage());
    		fenetre.getStatusNative().setText("Mammographie : "+nomMammo);
     
    		//Recuperation de la barre de status analysee
    		JLabel statusAnalysee = fenetre.getStatusAnalysee(); 
     
    		//Affichage de la mammo analysee en fonction de son etat
    		if(etatMammo.equals("EnAttenteAnalyse"))
    		{
    			fenetre.getPanneauMammoAnalysee().setImg(null);
    			affichageStatusAnalysee(fenetre, statusAnalysee, false, 
    					"Mammographie en attente d'analyse", Color.white);
    		}
    		else
    		{
    			fenetre.getPanneauMammoAnalysee().setImg(images[1].getImage());
     
    			if(etatMammo.equals("EnAttenteValidation"))
    			{
    				affichageStatusAnalysee(fenetre, statusAnalysee, true, 
    						"Densité mammaire : "+ control.getDensite(nomMammo)+"%", 
    						Color.white);
    			}
    			else if(etatMammo.equals("Valide"))
    			{
    				affichageStatusAnalysee(fenetre, statusAnalysee, false, 
    						"Densité mammaire : "+ control.getDensite(nomMammo)+"%", 
    						MammoCellRenderer.couleurValide);
    			}
    			else if(etatMammo.equals("Invalide"))
    			{
    				affichageStatusAnalysee(fenetre, statusAnalysee, false, 
    						"Densité mammaire : "+ control.getDensite(nomMammo)+"% Invalidée", 
    						MammoCellRenderer.couleurInvalide);	
    			}
    		}
    	}
    enfin, voilà la methode qui regroupe l'affichage de la barre de status :
    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
    /**
             * affichageStatusAnalysee : gere l'affichage de la barre de status 
             * @param fenetre : FenetreLAM
             * @param statusAnalysee : Jlabel a modifier
             * @param boutonsVisibles : true si les boutons de validation doivent etre visible, false sinon
             * @param textLabel : texte a afficher dans la barre de status
             * @param couleurBackground : couleur du fond de la barre de status
             */
    	private void affichageStatusAnalysee(FenetreLAM fenetre, JLabel statusAnalysee,
    			boolean boutonsVisibles, String textLabel, Color couleurBackground)
    	{
    		statusAnalysee.setText(textLabel);
    		statusAnalysee.setBackground(couleurBackground);
     
    		String nomMammo = this.getNom();
     
    		JButton valide = fenetre.getBoutonValidation();
    		valide.setVisible(boutonsVisibles);
    		valide.setName(nomMammo);
     
    		JButton invalide = fenetre.getBoutonInvalidation();
    		invalide.setVisible(boutonsVisibles);
    		invalide.setName(nomMammo);
    	}
    C'est bien plus propre comme ça (enfin je trouve).
    Maintenant, il me reste à savoir où intégrer le SwingWorker ou la SwingUtilities.invokeLater. J'avoue que je suis un peu paumée entre les 2 car pour moi, la partie lente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre.getPanneauMammoNative().setImg(images[0].getImage());
    doit bien être gérée par l'EDT puisque ça fait appel à un paintComponent... non?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser les thread dans ce cas ?
    Par ketchupi dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 03/06/2011, 00h56
  2. comment utiliser les threads
    Par oumay dans le forum Général Java
    Réponses: 1
    Dernier message: 15/02/2010, 00h35
  3. comment utiliser Les threads
    Par alaa_85 dans le forum VB.NET
    Réponses: 33
    Dernier message: 08/06/2007, 13h53
  4. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 14h04
  5. [C# 2.0][Form]Comment utiliser les Delegates & Threading
    Par Tips dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/01/2006, 14h22

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