Rechercher : dans
Par :

[JAVA] - Changement d'image

Dernière réponse le 30 déc 2007 à 17:13:22 Kronos85, le 29 déc 2007 à 22:20:02 
 Signaler ce message aux modérateurs

Bonjour,

J'ai fait un petit programme pour tester une fonction.

Lorsque l'on clique sur un premier bouton, le programme affiche une image ensuite je voudrais qu'en cliquant sur un deuxième bouton on affiche une autre image à la place de la première. En cliquant de nouveau sur la première on affiche à nouveau... blablabla ^^

Mon souci bien évidamment, c'est que je peux afficher l'une des deux images sans soucis mais quand je clique sur l'autre bouton, l'autre image ne s'affiche pas. La même image reste affichée.

Voici mon code, si une âme charitable voulait bien m'éclairer :')

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SwitchImages extends JFrame implements ActionListener{
			
	private static final long serialVersionUID = 1L;
	
	JButton b1 = new JButton("1");
	JButton b2 = new JButton("2");
	
	String linkImg1 = "D:\\1.jpg";
	String linkImg2 = "D:\\2.jpg";
	
	JPanel pane= new JPanel();
	
		public SwitchImages(int choix)
		{
			setBounds(10,10,680,680);
			setTitle("Switch Images");
			
			pane.setLayout(null);
			
			b1.setBounds(220,45,42,30);
			b2.setBounds(290,45,42,30);
			
			pane.add(b1);
			pane.add(b2);
			
			b1.addActionListener(this);
			b2.addActionListener(this);
			
			setContentPane(pane);
		}	
		
		public void redraw(int choix)
		{
			if (choix==1)
			{	
				AffichageImage image = new AffichageImage(linkImg1);
				image.setBounds(10, 130, 640, 480);
				pane.add(image);
				setContentPane(pane);
			}
			
			else if (choix==2)
			{
				AffichageImage image = new AffichageImage(linkImg2);
				image.setBounds(10, 130, 640, 480);
				pane.add(image);
				setContentPane(pane);
			}			
		}
		
		public void actionPerformed(ActionEvent evt)
		{
			Object result = evt.getSource();
			
			if (result==b1)
				redraw(1);
			else if (result==b2)
				redraw(2);				
		}
				
		
		class AffichageImage extends Canvas
		{
			Image img;

			public AffichageImage(String emplacementImage)
			{
				img = getToolkit().getImage(emplacementImage);
				prepareImage(img, this);
			}
		  
		  public void paint(Graphics g)
		    {
		    g.drawImage(img, 0, 0, this);
		    }	  
		}

		
	public static void main(String[] args) {
		
		SwitchImages Interface = new SwitchImages(0);
		Interface.setVisible(true);
		Interface.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
	}
}


Merci d'avance ;)
Configuration: Windows Vista
Firefox 2.0.0.11

Meilleures réponses pour « [JAVA] Changement d'image » dans :
Changer l'image de Grub VoirChanger l'image de Grub     Pour changer l'image d'arrière plan de Grub, qui se trouve dans l'archive /boot/gfxmenu, il suffit de la remplacer par une autre de la même dimension et du même nom, à savoir: 800*600, back.jpg Ouvrez une console...
Changer de fond d'écran VoirPour Windows XP et versions antérieures Pour Windows Vista Obtenir des fonds d'écran Solution plus rapide Comment changer l'arrière-plan du Bureau ? Un fond d'écran est une image utilisée en arrière-plan de votre bureau. Lors d'une...
Gnome - Changer une icône. VoirChanger l'icône d'un fichier, d'un raccourci Sous Gnome, il est extrêmement facile de changer l'icône d'un fichier. Prenons l'exemple de ce volume sur le bureau :       Faites un clic droit sur le fichier / raccourcis puis "propriétés". ...

1

Posotaz, le 30 déc 2007 à 01:09:38

Hello Kronos85,


Petites suggestions :

- Avant d'ajouter "image" à "pane", essaie de faire un pane.remove(image); Evidemment il faudra un peu modifier ton code pour garder la référence du dernier objet "AffichageImage" ajouté à "pane". Sinon en fait tu ne vas pas remplacer la première image par l'autre mais juste les superposer (et encore, j'utilise rarement les layout null).

- Après avoir cliqué sur le deuxième (enfin l'autre) bouton, essaie de redimensionner la fenêtre manuellement... pourquoi parce que ça va forcer la fenêtre à mettre à jour l'affichage de ses composants. Si ton autre image apparaît c'était juste un soucis de rafraîchissement des composants et il doit y avoir une méthode dans le panel pour rafraîchir ses composants (je ne sais pas si le fait de faire un setContentPane y substitue vraiment), sinon ben... j'en sais rien en général pour afficher des images je me contente des JLabel, c'est moins casse-tête ^^

Répondre à Posotaz

2

Kronos85, le 30 déc 2007 à 01:35:36

Cool ^^ tes remarques m'ont donné des idées :D

J'ai placé les chargements d'image dans le constructeur (de façon à avoir mes images référencées en global)
J'ai rajouté un pane.remove(image2); avant le pane.add(image1); et vice-versa.

Et ça marche parfaitement !!!

Comme tu l'as remarqué également, le setContentPane ne sert pas à rafraichir la fenêtre (apparament) car je les ai supprimé (à part le tout premier évidement ^^ ) et les images se mettent bien à jour toutes seules :)


Dernier point... tu affiches des images dans des JLabel ? je serais intéressé de savoire comment :) (je débute en JAVA et je n'ai que des bases de BASIC et de C ^^ )


En tout cas merci pour cette réponse rapide c'est sympa !

Répondre à Kronos85

3

Posotaz, le 30 déc 2007 à 16:48:59

Bonjour,

Au plaisir.

Oui j'utilise la propriété "icon" des JLabel pour afficher mes images. Un simple appel à la méthode "setIcon", je ne mets pas de texte et voilà :-) Ca simplifie grandement et je n'ai pas besoin d'utiliser un Canvas pour repeindre l'image. En plus on a l'avantage de pouvoir conserver le fait d'ajouter du texte pour une légende par exemple, on sait définir la position du texte par rapport à l'icone,... bref ce n'est peut-être pas la méthode appropriée mais sincèrement je m'en fous :D (cela dit si un spécialiste des images dans Java veut tenter de me faire changer d'avis je reste ouvert).

Répondre à Posotaz

4

 Kronos85, le 30 déc 2007 à 17:13:22

Ok merci ;)

Répondre à Kronos85