Changement dynamique d'image en swing [Résolu]

boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 1 avril 2006 à 01:32 - Dernière réponse : boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention
- 2 avril 2006 à 14:48
bonjour,

je cherche à developper une visionneuse en java le problème se situe au changement d'image, lors du clique sur le bouton "suivant" par exemple je veux passer à l'image suivante mais ca marche pas...
niveau code j'utilise un Vector d'image
vect = new Vector();
vect.addElement(image1);
vect.addElement(image2);
vect.addElement(image3);
vect.addElement(image4);

j'ai des boutons dans ma JFrame et pr implémenter les évènement je fais

public class Visionneuse extends JFrame implements ActionListener

et donc apres pour passer à l'image suivante je penser faire ca mais ca marche pas

public void actionPerformed(ActionEvent e) {

if(e.getSource().equals(buotonSuivant)){
this.getContentPane().add((Component) vect.get(1));
}
}

alors si vous pouvez m'aider......merci
Afficher la suite 

14 réponses

Répondre au sujet
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 14:48
+3
Utile
c'est bon j'ai trouvé hourrra faut juste faire après avoir ajouté le composant................................

panImage.revalidate();
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de boudyureka
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 1 avril 2006 à 08:46
0
Utile
Tes image1 image2 etc... c'est quoi comme objet exactement ? (Image, JLabel , etc... ?)
C'est quoi qui marche pas ? compile pas ? exception ? c'est assez repetté sur le forum d'etre clair et precis! ...

Si je crois avoir compris : voici une solution

créé par exemple un JLabelque tu places dans ta frame : un JLabel est une maniere simple d'afficher des images... (avec setIcon() ) chaque fois que tu appui sur suivant, tu changes l'image affichée par ton JLabel

public void actionPerformed(ActionEvent e)
{

if(e.getSource().equals(buotonSuivant))
{
mon_jlabel.setIcon(vect.get(image_courante));
}
}

Pour que ça marche, dans ton vecteur tu dois y mettre des ImageIcon :
par exemple :
vect.addElement(new ImageIcon("mon_image1.gif"));
Commenter la réponse de tucobouch
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 1 avril 2006 à 13:09
0
Utile
ce que je met dans mon vector c'est des JPanel avec un fond image en faite je fais suivre le code vous comprendrais mieux


Code:
,
----

classe visionneuse
package presentation;
/*
* Created on 31 mars 2006
*/
/**
* @author Johnny GIMENEZ
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class Visionneuse extends JFrame implements ActionListener {

protected JPanel panNavigation;
protected JButton buAvance, buArriere, buZoomAvt, buZoomArr, buOrigine, buFin;
protected Vector vect;

public Visionneuse(){

this.getContentPane().setLayout(new FlowLayout());
Image icone = Toolkit.getDefaultToolkit().getImage("Icones/boudou.gif");
this.setIconImage(icone);
this.setTitle("Visionneuse de planches");

CpImageResized image1 =new CpImageResized(Toolkit.getDefaultToolkit().getImage("Icones/Album/ichigo.jpg"),
new Dimension(700,700));
CpImageResized image2 =new CpImageResized(Toolkit.getDefaultToolkit().getImage("Icones/Album/LesNombrils_p3.jpg"),
new Dimension(700,700));
CpImageResized image3 =new CpImageResized(Toolkit.getDefaultToolkit().getImage("Icones/Album/asterix_ciel.jpg"),
new Dimension(700,700));
CpImageResized image4 =new CpImageResized(Toolkit.getDefaultToolkit().getImage("Icones/Album/LesNombrils_cover.jpg"),
new Dimension(700,700));

vect = new Vector();
vect.addElement(image1);
vect.addElement(image2);
vect.addElement(image3);
vect.addElement(image4);

panNavigation = new JPanel(new GridLayout(1,5));
buAvance = new JButton(new ImageIcon("Icones/avance.png"));
buAvance.setPressedIcon(new ImageIcon("Icones/avancePressed.png"));
buAvance.addActionListener(this);
buArriere = new JButton(new ImageIcon("Icones/arriere.png"));
buArriere.setPressedIcon(new ImageIcon("Icones/arrierePressed.png"));
buZoomAvt = new JButton(new ImageIcon("Icones/zoomAvt.png"));
buZoomAvt.setPressedIcon(new ImageIcon("Icones/zoomAvtPressed.png"));
buZoomArr = new JButton(new ImageIcon("Icones/zoomArr.png"));
buZoomArr.setPressedIcon(new ImageIcon("Icones/zoomArrPressed.png"));
buOrigine = new JButton(new ImageIcon("Icones/origine.png"));
buOrigine.setPressedIcon(new ImageIcon("Icones/originePressed.png"));
buFin = new JButton(new ImageIcon("Icones/fin.png"));
buFin.setPressedIcon(new ImageIcon("Icones/finPressed.png"));

panNavigation.add(buOrigine);
panNavigation.add(buArriere);
panNavigation.add(buZoomAvt);
panNavigation.add(buZoomArr);
panNavigation.add(buAvance);
panNavigation.add(buFin);

// this.setContentPane(image1);
this.getContentPane().add((Component) vect.get(3));
this.getContentPane().add(panNavigation);
this.setSize(700,790);
this.setResizable(false);

//mettre le fenetre au milieu de l'écran
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);

// Création de la fenêtre
/*ImageTrack view = new ImageTrack();
// Mise en place
view.pack();
// Affichage de la fenêtre
view.setVisible(true);*/

}

public void actionPerformed(ActionEvent e) {

if(e.getSource().equals(buOrigine)){
//this.getContentPane().add((Component) vect.get(0));
}

else if(e.getSource().equals(buArriere)){
}

else if(e.getSource().equals(buZoomAvt)){
}

else if(e.getSource().equals(buZoomArr)){
}

else if(e.getSource().equals(buAvance)){
this.getContentPane().remove(0);
this.getContentPane().add((Component) vect.get(3));
}

else if(e.getSource().equals(buFin)){
}

}

}


Code:
,
----

classe CpImageResized
package presentation;
/*
* Created on 31 mars 2006
*/
/**
* @author Labo-sun
*/
import java.awt.Color;
import java.awt.Rectangle;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JComponent;
import javax.swing.JPanel;

import presentation.Mandelbrot.Zone;

public class CpImageResized extends JPanel {

private Image image;

/**
* Les propriètées maxX & maxY
* permettent de définir les valeurs max de
* l’image
**/

private int maxX=50;
private int maxY=50;

private int dx;
private int dy;

//Facteur de réduction de l’image
private float facteur;

//Booléen permettant de savoir si on est sur l’image
private boolean over;

/**
* Permet d'afficher une image
* au format maxX & maxY
* @param image
*/

public CpImageResized(Image image) {

this.image=image;
this.setPreferredSize(new Dimension(maxX,maxY));
repaint();

}

/**
* Constructeur
* Permet d'afficher une image au format
* spécifié par dim
* @param image
* @param dim
*/

public CpImageResized(Image image,Dimension dim) {

this.image=image;
this.maxX=dim.width;
this.maxY=dim.height;

this.setPreferredSize(new Dimension(maxX,maxY));

repaint();

}

/**
* On redéfini la méthode paint pour que le composant affiche
* une image.
**/

public void paint(Graphics arg0) {

Graphics2D g = (Graphics2D)arg0;

/**
* Algo permettant de calculer la taille de l’image à afficher.
* Ici facteur va permettre de réduire l’image selon des règles de
* proportionnalité
**/

float x = image.getWidth(null);
float y = image.getHeight(null);

facteur = 1;

if (x>y){
// Le facteur est calculé à partir de x
if (x>maxX){
facteur=x/maxX;
}
}else{
// Le facteur est calculé à partir de y
if (y>maxY){
facteur=y/maxY;
}
}
//Permet de déterminer la grandeur de l’image
dx = (int) (x/facteur);
dy = (int) (y/facteur);
int ty = (maxY/2)-(dy/2);
int tx = (maxX/2)-(dx/2);

/**
* Permet d’afficher l’image passée en paramètre.
* Si la sourie est sur l’image, alors on spécifie une couleur
* sinon on en sélectionne une autre
* avant d’afficher un rectangle autour de l’image
*
**/

//g.drawImage(image,tx,ty,dx,dy,this);
g.drawImage(image , tx, ty, dx, dy, this );
}

public int getDx() {
return dx;
}

public void setDx(int dx) {
this.dx = dx;
}

public int getDy() {
return dy;
}

public void setDy(int dy) {
this.dy = dy;
}

}

voila.....
Commenter la réponse de boudyureka
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 1 avril 2006 à 15:09
0
Utile
c'est quoi exactement qui marche pas ? (j'ai pas envi de me farcir le code!)
quand tu appui sur suivant ça fait quoi?

public void actionPerformed(ActionEvent e) {

if(e.getSource().equals(buOrigine)){
//this.getContentPane().add((Component) vect.get(0));
}

else if(e.getSource().equals(buArriere)){
}

else if(e.getSource().equals(buZoomAvt)){
}

else if(e.getSource().equals(buZoomArr)){
}

else if(e.getSource().equals(buAvance)){
this.getContentPane().remove(0);
this.getContentPane().add((Component) vect.get(3));
}

else if(e.getSource().equals(buFin)){
}

}

quand tu appui sur suivant, ça change pas d'image non ? car l'image d'index 3 a deja été mit dans ta frame (voir ton constructeur de Visionneuse() )
Commenter la réponse de tucobouch
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 1 avril 2006 à 15:23
0
Utile
oui c'est ca limage ne saffiche pas quand je clique sur suivant mais je savais pas que c'était parce qu'il a déjà été mis dans la frame faut faire comment alors????
Commenter la réponse de boudyureka
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 1 avril 2006 à 15:50
0
Utile
oui c'est ca ca marche pas quand j'appuie mais je savais pas que c'était à cause que j'avais deja mis l'image dans la frame je fais comment alors????
Commenter la réponse de boudyureka
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 1 avril 2006 à 21:08
0
Utile
En fait, là où ça peche c'est la ligne en rouge dans poste precedent :
essaye de remplacer par :

panelImages.removeAll();
image++ //image suivante
panelImages.add((Component) vect.get(image));

panelImage est un panel de ta frame où sera tes images

- [TucoBouch] -
Commenter la réponse de tucobouch
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 00:27
0
Utile
j'avais deja pensé metre ca dans un panel j'avais essayer mais je crois que ca marchait pas je recommencerais demain pr voir la je vais dormir je mettrai un nouveau poste pr tenir au courant.....
Commenter la réponse de boudyureka
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 12:17
0
Utile
bon voila j'ai fait ca

JPanel panImage;

vect = new Vector();
vect.addElement(image1);
vect.addElement(image2);

vect.addElement(image4);

panImage.add((Component) vect.get(2));

this.getContentPane().add(panImage);

ensuite ds l'actionPerformed

if(e.getSource().equals(buAvance)){
panImage.removeAll();
panImage.add((Component) vect.get(3));

et la ca marche pas ma fenetre visionneuse ne s'ouvre meme pas y a une exception(nullPointerException) l'exception se trouve sur la ligne de code

panImage.add((Component) vect.get(2));

voila dc l'image n'est pas ajouté au panel apparament je sais pas pkoi...
Commenter la réponse de boudyureka
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 2 avril 2006 à 12:33
0
Utile
et avec la ligne panImage=new JPanel() ça marche pas mieux ?...

- [TucoBouch] -
Commenter la réponse de tucobouch
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 12:33
0
Utile
lol jsuis tro bete
Commenter la réponse de boudyureka
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 12:36
0
Utile
c'est bon je lai crée l'image s'affiche et quand je fais suivant il remove tout c'est bon mais il n'ajoute pas l'image après et il n'ya pas d'exception......
Commenter la réponse de boudyureka
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 2 avril 2006 à 13:41
0
Utile
je pense que c'est un probleme de rafraichissement, est ce que l'image apparait lorsque tu redimensionne la fenetre a la souris par exemple ?

Bon courage

- [TucoBouch] -
Commenter la réponse de tucobouch
boudyureka 18 Messages postés jeudi 2 février 2006Date d'inscription 5 avril 2006 Dernière intervention - 2 avril 2006 à 14:41
0
Utile
en fait o tt debut limage s'affiche pas et des fois elle s'affiche tte seule si elle n'est pas sur les crois faut ke je bouge la fenetre ds tt les sens pr qu'elle apparaisse...mais kan je clique sur suivant l'image ne disparait pas et c'est seulement quand je bouge encore dans tous les sens qu'elle disparait cependant elle n'affiche pas la nouvelle image.....
Commenter la réponse de boudyureka

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.