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

Interfaces Graphiques en Java Discussion :

Affichage et calcul en background multiple


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut Affichage et calcul en background multiple
    Bonjour,

    Je rencontre un probl�me de "compr�hension" qui m'emp�che d'avancer dans le d�veloppement de mon programme.
    Le but �tant � terme de pouvoir afficher une image et d'effectuer en background le calcul de l'image suivante pendant que celle qui est affich�e s'anime.
    Donc il s'agit en gros de :
    image1 calcul�e > image1 s'affiche > lancement du calcul de l'image 2 (pas moins de 10 secondes de calcul) > pendant ce temps on peut se d�placer sur l'image1 en attendant que l'image2 soit calcul�e > calcul fini > affichage image2 > lancement du calcul de l'image3 > etc. jusqu�� la fermeture de la fen�tre par l'user.

    J'ai �labor� tous les �l�ments n�cessaires � l'affichage et au calcul d'une image, mais je ne sais pas comment r�aliser cet encha�nement et suis donc coinc�e depuis plusieurs jours.
    J'ai vu qu'il existe la classe SwingWorker mais j'ai aussi lu qu'elle ne peut �tre utilis�e qu'une unique fois puis ferm�e (?).

    Y aurait-il un moyen d'utiliser SwingWorker en boucle ? Ou peut-�tre une autre alternative avec mes propres threads ?
    Si chaque image calcul�e est consid�r�e comme un �l�ment en plus dans la progression "infinie", est-il possible de passer tout un tableau 2D de la m�thode doInBackground � celle qui affiche ?

    J'esp�re que j'ai d�crit assez clairement mon soucis et vous remercie d'avance pour vos r�ponses !

  2. #2
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Salut,

    On peut effectivement utiliser le SwingWorker en boucle (et publier un tableau 2D sans probl�me), avec une interruption lorsque la fen�tre se ferme, mais tu aura plus vite fait et aussi simple d'utiliser un ExecutorService (voir Executors.newSingleThreadExecutor()) en faisant simplement la mise � jour de l'UI avec un invokeLater en fin de t�che. Il faudra simple faire un shutdown du service � la fermeture de la fen�tre.
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  3. #3
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut
    Merci pour cette r�ponse rapide !

    Mon apprentissage des threads est tout r�cent, j'ai tout de meme essay� d'impl�menter la solution propos�e avec Executors.newSingleThreadExecutor()).
    Les calculs tournent bien en fond et j'ai une m�thode d'update mais dans mon JFrame seule la premi�re image calcul�e s'affiche, les autres images qui suivent ne s'affichent jamais.

    Voici la classe principale
    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
     
    public class Test {
    	private MaFenetre mf;
    	ExecutorService pool = Executors.newSingleThreadExecutor();
     
    	public Test() {
     
    		mf = new MaFenetre();
    		pool.submit(new Thread(new Runnable() {
    			@Override
    			public void run() {
    				runTest();
    			}
    		}));
    	}
     
    	public void runTest() {
    		MonImage mi;
    		for (int i = 1; i < 5; i++) {
    			int[][] image = calculImage();
    			System.out.println("Image " + i + " calculée");
    			updateProgress(image);
    		}
    	}
     
    	public void updateProgress(int[][] image) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				mf.afficherImage(image);
    			}
    		});
    	}
    }
    La classe du JFrame :
    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
    public class MaFenetre extends JFrame implements Observer {
    	MyPanel monPanel;
     
    	public MaFenetre() {
    		this.setSize(800, 800);
    		this.setLayout(new GridLayout());
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		this.setVisible(true);
    	}
     
    	public void afficherImage(int[][] image) {
    		MyPanel monPanel = new MyPanel(image);
    		getContentPane().removeAll();
    		this.add(monPanel);
    		SwingUtilities.updateComponentTreeUI(this);
    	}
     
    	@Override
    	public void update(Observable o, Object arg) {
    	}
    }
    La classe du JPanel :
    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 class MyPanel extends JPanel {
    	private Image img;
     
    	public MyPanel(int[][] array) {
    		this.img = toImage(array);
    	}
     
    	public Image toImage(int[][] array) {
    		BufferedImage img = new BufferedImage(array[0].length, array.length,
    				BufferedImage.TYPE_INT_RGB);
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array[0].length; j++) {
    				img.setRGB(j, i, array[i][j]);
    			}
    		}
    		return img;
    	}
     
    	@Override
    	public void paintComponent(Graphics g) {
    		super.paintComponents(g);
    		g.drawImage(this.img, 0, 0, null);
    	}
     
    }
    Il y a peut �tre quelques bizarreries car j'ai retir� les gros pav�s de calculs pour que le code soit lisible, mais le tout se lance sans probl�me.
    Y'a-t-il quelque chose que j'ai fait qui emp�che l'update du Jframe ? Est-ce que j'utilise correctement la m�thode invokeLater ?

    Merci d'avance !

  4. #4
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Sans ordre pr�f�rentiel particulier
    1. Inutile de passer (submit) un thread � l'executor : un Runnable suffit (un newSingleThreadExecutor utilise son propre pool de threads, n'en contenant qu'un et un seul, pour ex�cuter les Runnable les uns apr�s les autres, dans l'ordre. Il faudra penser juste � ce que chaque t�che lance la suivante lorsqu'elle est termin�e (ou signale � un composant en attente qu'il peut la g�n�rer, celui-l� pouvant s'ex�cuter dans son propre thread) : il ne faut pas faire de boucle dans runTest() (ou alors tu fais un simple thread avec cette boucle.
    2. Le code
      Code : S�lectionner tout - Visualiser dans une fen�tre � part
      1
      2
      3
      4
      5
      6
      7
      8
      BufferedImage img = new BufferedImage(array[0].length, array.length,
      				BufferedImage.TYPE_INT_RGB);
      		for (int i = 0; i < array.length; i++) {
      			for (int j = 0; j < array[0].length; j++) {
      				img.setRGB(j, i, array[i][j]);
      			}
      		}
      		return img;
      devrait s'ex�cuter dans la t�che (dans lethread du ExecutorService et pas le thread Swing. Accessoirement, il y a moyen de construire le tableau de mani�re � aller plus vite pour construire l'image (mais ce ne sera pas aussi simple qu'une boucle sur une matrice 2d de couleurs)
    3. Accessoirement, la m�thode au point 2 ne modifie pas la variable img de MyPanel, donc ne devrait pas �tre public (n'a pas d�int�r�t � l'�tre en tout cas), mais �a ne pose pas de probl�me en l'�tat de ton code.
    4. SwingUtilities.updateComponentTreeUI(this); est non seulement inutile dans ce contexte (non UI) mais ne fait pas ce que tu penses (rafra�chir l'affichage). Fais plut�t:
      Code : S�lectionner tout - Visualiser dans une fen�tre � part
      1
      2
      this.revalidate(); // revalide l'arbre afin que l'agencement se refasse correctement (pas forcément nécessaire selon les layouts et les dimensions avant et après)
      this.repaint();// redessine
    5. Plut�t que de modifier l'arborescence de composants (le removeAll() suivi d'un new xxpanel() et d'un add()), tu peux aussi changer l'image dans un panel et repaindre �ventuellement (tu parlais dans ton premier message d'une image anim�e et j'imaginais que tu avais un Timer pour animer l'image, donc pour moi pas besoin de repeindre).


    Voici un exemple :
    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
    public class Demo {
     
    	public static void main(String[] args) {
    		MaFenetre mf = new MaFenetre();
    		final Demo test = new Demo(mf);
    		mf.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosed(WindowEvent e) {
    				test.stop();
    			}
    		});
    		test.createNewImage(); // première
    		mf.setVisible(true);
    		test.start();
    	}
     
    	private MaFenetre fenetre;
    	private ExecutorService executor;
     
    	public Demo(MaFenetre fenetre) {
     
    		this.fenetre = fenetre;
     
    	}
     
    	public void start() {
    		if ( executor==null ) {
    			executor = Executors.newSingleThreadExecutor();  
    			submitTask();
    		}
    	}
     
    	private void submitTask() {
    		if ( executor!=null ) {
    			executor.execute(()-> {
    				/*try {*/
    					//Thread.sleep(1000); // simule tâche longue
    					createNewImage();
    					submitTask();
    				/*} catch (InterruptedException e) {
    				} */
    			});
    		}
    	}
     
    	public void stop() {
    		if ( executor!=null ) {
    			executor.shutdownNow();
    			executor=null;
    		}
    	}
     
    	public void createNewImage() { 
    		fenetre.updateImage(ImageFactory.INSTANCE.createNoiseImage(300, 200));
    	}
     
    }
    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
    public class MaFenetre extends JFrame {
     
    	private final ImagePanel imagePanel;
     
    	public MaFenetre() {
    		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		this.setSize(800, 800); 
    		this.setLocationRelativeTo(null);
    		imagePanel = new ImagePanel();
    		add(imagePanel);
    	}
     
    	public void updateImage(BufferedImage image) {
    		SwingUtilities.invokeLater(()-> imagePanel.setImage(image));
    	}
     
    }
    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
    public class ImagePanel extends JPanel {
     
    	private BufferedImage image = null;
     
    	public ImagePanel() {
    	}
     
    	public void setImage(BufferedImage image) { 
    		this.image=image;
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		if ( image!=null ) {
    			g.setColor(Color.BLUE);
    			final int x = (getWidth()-image.getWidth())/2;
    			final int y = (getHeight()-image.getHeight())/2;
    			g.fillRoundRect(x-10, y-10, image.getWidth()+20, image.getHeight()+20, 5, 5);
    			g.setColor(Color.BLUE.darker());
    			g.drawRoundRect(x-10, y-10, image.getWidth()+20, image.getHeight()+20, 5, 5);
    			g.drawImage(image, x, y, this);
    			g.drawRect(x, y, image.getWidth(), image.getHeight());
    		}
    	}
     
    }
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    /**
     * 
     * @author jdrigo
     *
     */
    public enum ImageFactory {
     
    	INSTANCE;
     
    	public BufferedImage readImage(String path) throws IOException {
    		return ImageIO.read(new File(path));
    	}
     
    	public BufferedImage readImage(URL url) throws IOException {
    		return ImageIO.read(url);
    	}
     
    	public BufferedImage createNoiseImage(int width, int height) {
    		BufferedImage image = new BufferedImage(width, height,
    				BufferedImage.TYPE_INT_RGB);
     
    		double[][] noise = createNoise(width, height);
     
    		for (int x = 0; x < width; x++) {
    			for (int y = 0; y < height; y++) { 
     
    				int g = (int) (256 * noise[x][y]);
    				Color color = new Color(g, g, g);
     
    				image.setRGB(x, y, color.getRGB());
     
    			}
    		}
     
    		return image;
    	}
     
    	public BufferedImage createClouds(int width, int height, int blue) {
    		if ( width<=0 || height<=0 ) throw new IllegalArgumentException("Size is out of range: " + width + " × " + height);
    		if ( blue<169 || blue>240 ) throw new IllegalArgumentException("Blue color is out of range: " + blue);
    		BufferedImage image = new BufferedImage(width, height,
    				BufferedImage.TYPE_INT_RGB);
     
    		double[][] noise = createNoise(width, height);
     
    		for (int x = 0; x < width; x++) {
    			for (int y = 0; y < height; y++) {
     
    				int l = 192 + (int)(turbulence(x, y, 64, noise)) / 3;
    				if ( l>255 ) {
    					l=255;
    				}
    				Color color = HSLToRGB(blue, 255, l);
     
    				image.setRGB(x, y, color.getRGB());
     
    			}
    		} 
    		return image;
    	}
     
    	public Color HSLToRGB(int h, int s, int l) {
    		return HSLToRGB(h, 100*s/255f, 100*(l/255f), 1f);
    	}
     
    	public Color HSLToRGB(float h, float s, float l) {
    		return HSLToRGB(h, s, l, 1f);
    	}
     
    	public Color HSLToRGB(float h, float s, float l, float alpha) {
    		if (s <0.0f || s > 100.0f) {
    			throw new IllegalArgumentException( "Color parameter outside of expected range - Saturation: " + s);
    		}
     
    		if (l <0.0f || l > 100.0f) { 
    			throw new IllegalArgumentException( "Color parameter outside of expected range - Luminance: " + l );
    		}
     
    		if (alpha <0.0f || alpha > 1.0f) {
    			throw new IllegalArgumentException( "Color parameter outside of expected range - Alpha: " + alpha );
    		}
     
    		h = h % 360.0f;
    		h /= 360f;
    		s /= 100f;
    		l /= 100f;
     
    		float q = 0;
     
    		if (l < 0.5)
    			q = l * (1 + s);
    		else
    			q = (l + s) - (s * l);
     
    		float p = 2 * l - q;
     
    		float r = Math.max(0, HueToRGB(p, q, h + (1.0f / 3.0f)));
    		float g = Math.max(0, HueToRGB(p, q, h));
    		float b = Math.max(0, HueToRGB(p, q, h - (1.0f / 3.0f)));
     
    		r = Math.min(r, 1.0f);
    		g = Math.min(g, 1.0f);
    		b = Math.min(b, 1.0f);
     
    		return new Color(r, g, b, alpha);
    	}
     
    	private float HueToRGB(float p, float q, float h) {
    		if (h < 0) h += 1;
     
    		if (h > 1 ) h -= 1;
     
    		if (6 * h < 1)
    		{
    			return p + ((q - p) * 6 * h);
    		}
     
    		if (2 * h < 1 )
    		{
    			return  q;
    		}
     
    		if (3 * h < 2)
    		{
    			return p + ( (q - p) * 6 * ((2.0f / 3.0f) - h) );
    		}
     
       		return p;
    	}
     
    	private double[][] createNoise(int width, int height) {
     
    		Random random = new Random();
     
    		double[][] noise = new double[width][height];
    		for (int x = 0; x < width; x++) {
    			for (int y = 0; y < height; y++) {
    				noise[x][y] = random.nextDouble();
    			}
    		}
    		return noise;
     
    	}
     
    	// zoom
    	private double smoothNoise(double x, double y, double[][] noise) {
    		int noiseWidth = noise.length;
    		int noiseHeight = noise[0].length;
     
    		// partie fractionnel
    		double fractX = x - (int) x;
    		double fractY = y - (int) y;
     
    		// bouclage
    		int x1 = ((int) x + noiseWidth) % noiseWidth;
    		int y1 = ((int) y + noiseHeight) % noiseHeight;
     
    		// valeurs voisines
    		int x2 = (x1 + noiseWidth - 1) % noiseWidth;
    		int y2 = (y1 + noiseHeight - 1) % noiseHeight;
     
    		// interpolation bilineaire
    		double value = 0.0;
    		value += fractX * fractY * noise[x1][y1];
    		value += fractX * (1 - fractY) * noise[x1][y2];
    		value += (1 - fractX) * fractY * noise[x2][y1];
    		value += (1 - fractX) * (1 - fractY) * noise[x2][y2];
     
    		return value;
    	}
     
    	private double turbulence(double x, double y, double size, double[][] noise) {
    		double value = 0.0, initialSize = size;
     
    		while (size >= 1) {
    			value += smoothNoise(x / size, y / size, noise) * size;
    			size /= 2.0;
    		}
     
    		return (128.0 * value / initialSize);
    	}
     
    }
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  5. #5
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut
    Alors:
    > J'ai mis la conversion du tableau 2D en image dans le thread
    > J'ai remplac�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SwingUtilities.updateComponentTreeUI(this);
    par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    this.revalidate();
    this.repaint();
    >J'ai corrig� le passage du runnable � mon pool
    >J'ai essay� de set l'image du panel au lieu de le recr�er � chaque fois, mais du coup plus rien ne s'affiche
    >Si je laisse la cr�ation d'un panel pour chaque image, il y a que l'image 1 qui est affich�e

    J'ai bien v�rifi� que les images calcul�es sont diff�rentes, le set de l'image dans le panel se fait bel et bien et le hashcode de l'image contenue change donc a chaque fois.
    J'ai tent� un revalidate() repaint() aussi dans le Jpanel, mais rien ne change.

    J'ai aussi tent� de bidouiller la m�thode d'affichage
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void afficherImage(Image image) {
    		this.monPanel.setImg(image);
    		Container p = getContentPane();
    		p.removeAll();
    		p.setLayout(new GridLayout());
    		p.add(monPanel);
    		setContentPane(p);
    		monPanel.repaint();
    	}
    J'ai vraiment l'impression que je m'y prend mal pour afficher l'image, ou que j'oublie de mettre un �l�ment.

  6. #6
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Kendaya Voir le message
    J'ai vraiment l'impression que je m'y prend mal pour afficher l'image, ou que j'oublie de mettre un �l�ment.
    Je t'ai mis un exemple complet depuis tout � l'heure.
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  7. #7
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut
    Merci beaucoup pour cet exemple.
    J'ai remplac� mon code par ce dernier (j'ai du adapter 2-3 trucs pour mes calculs) et j'obtiens maintenant la 1�re image encadr�e de bleu.. et c'est tout, les suivantes ne s'affichent pas

  8. #8
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut
    Je retire ce que j'ai dis, j'avais oubli� un �l�ment pour l'update !!
    Du coup j'ai bien mes images qui s'affichent � tour de r�le.
    Merci infiniment !

    (merci aussi car je n'avais jamais vu l'utilisation de -> et j'ai pu apprendre une nouvelle chose )

  9. #9
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 56
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Pour ne pas le cadre bleu, tu as vu ce qu'il fallait faire (supprimer la partie qui dessine �a) ?:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ( image!=null ) {
    			/*g.setColor(Color.BLUE);
    			final int x = (getWidth()-image.getWidth())/2;
    			final int y = (getHeight()-image.getHeight())/2;
    			g.fillRoundRect(x-10, y-10, image.getWidth()+20, image.getHeight()+20, 5, 5);
    			g.setColor(Color.BLUE.darker());
    			g.drawRoundRect(x-10, y-10, image.getWidth()+20, image.getHeight()+20, 5, 5);*/
    			g.drawImage(image, x, y, this);
    			/*g.drawRect(x, y, image.getWidth(), image.getHeight());*/
    		}
    Ensuite, je ne sais pas quelles modifications tu as faites, mais si seule la premi�re image s'affiche, c'est que :
    • soit tu as supprim� quelque chose qui ne fallait pas
    • soit que la deux�me image met tellement longtemps � se g�n�rer (des traces,, ou passer en mode debug te permetttra de voir si on passe par ton code;,
    • soit que les autres images sont identiques � la premi�re et on ne voit ainsi rien (la traces ou le mode debug, pareil que ci-avant)
    • soit l'image est compl�tement transparente, donc visible
    • autre auquel je ne pense pas.


    Tu peux remettre ton dernier code ?
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  10. #10
    Membre � l'essai
    Femme Profil pro
    �tudiant
    Inscrit en
    Septembre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 6
    Par d�faut
    J'ai retir� le cadre bleu, merci.
    Donc votre code fonctionne parfaitement, c'�tait d� a une �tourderie de ma part sur l'une des m�thodes.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Affichage r�sultat d'un choix multiple
    Par Grangy dans le forum IHM
    R�ponses: 5
    Dernier message: 03/06/2008, 06h59
  2. Calcul de la multiplication de deux matrices
    Par al_alias dans le forum Pascal
    R�ponses: 2
    Dernier message: 30/05/2007, 22h37
  3. Pb affichage et calcul de difference d'heure
    Par gentiloup dans le forum Excel
    R�ponses: 3
    Dernier message: 27/04/2007, 18h27
  4. affichage et calcule de la date dans un tableau
    Par argon dans le forum Interfaces Graphiques en Java
    R�ponses: 35
    Dernier message: 22/06/2006, 10h51
  5. Am�liorer le calcul d'une multiplication (32*32)bits ?
    Par progfou dans le forum Algorithmes et structures de donn�es
    R�ponses: 36
    Dernier message: 23/03/2006, 11h34

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