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

Signaler
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006
-
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006
-
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

14 réponses

Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

c'est bon j'ai trouvé hourrra faut juste faire après avoir ajouté le composant................................

panImage.revalidate();
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
33
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"));
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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.....
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
33
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() )
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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????
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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????
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
33
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] -
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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.....
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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...
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
33
et avec la ligne panImage=new JPanel() ça marche pas mieux ?...

- [TucoBouch] -
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

lol jsuis tro bete
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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......
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
33
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] -
Messages postés
18
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
5 avril 2006

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.....