CAROUSEL : FAIRE DÉFILER DES JPANEL EN SWING

cs_vinceslas Messages postés 12 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 31 mai 2013 - 16 sept. 2011 à 09:35
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 22 mai 2013 à 14:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53559-carousel-faire-defiler-des-jpanel-en-swing

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mai 2013 à 14:03
Salut,

Comment appelles tu mon programme, l'erreur porte sur mon package mais est levée par la classe qui l'appelle.
laghdaph Messages postés 4 Date d'inscription lundi 3 janvier 2011 Statut Membre Dernière intervention 3 janvier 2011
22 mai 2013 à 12:14
svp cmt corriger cet erreur
java.lang.VerifyError: Bad type on operand stack in method fr.julien.caroussel.lancement.Lanceur.main([Ljava/lang/String;)V at offset 173
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getMethod0(Class.java:2685)
at java.lang.Class.getMethod(Class.java:1620)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:484)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:476)
Exception in thread "main" Java Result: 1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 sept. 2011 à 11:41
Meme la compilation avec javac ne requiert pas que tu redéfinisses l'ordre de compilation !
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 sept. 2011 à 11:40
Comment exécutes tu le programme ? Tu n'utilises pas d'ide ?
cs_vinceslas Messages postés 12 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 31 mai 2013
21 sept. 2011 à 11:22
Je ne refuse pas que ca marche mais pas à la perfection surtout voici la trace:

package fr.julien.caroussel.listener does not exist line 15
package fr.julien.caroussel.listener does not exist line 16
cannot find symbol line 93
cannot find symbol line 94

Ma question est la suivante quelle procédure est-ce que vous utilisez pour pour exécuter?

La mienne est la suivante: entete.java-> Carousel.java -> listenerAvancer.java et ListenerReculer.java -> lanceur.java
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 sept. 2011 à 10:16
Chez moi ca marche à la perfection, c'est pour celà que je te demande la trace de l'erreur. En as tu une ?
cs_vinceslas Messages postés 12 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 31 mai 2013
21 sept. 2011 à 10:01
OK voici le contenue du fichier ListenerAvancer.java qui importe bien sur le package Carousel :

package fr.julien.caroussel.listener;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import fr.julien.caroussel.Carousel;

public class ListenerAvancer implements MouseListener {

private Carousel caroussel;

public ListenerAvancer(Carousel c){
this.caroussel= c;
}

public void mouseReleased(MouseEvent arg0) {
caroussel.avancer();
}

public void mousePressed(MouseEvent arg0) {

}

public void mouseExited(MouseEvent arg0) {

}

public void mouseEntered(MouseEvent arg0) {

}

public void mouseClicked(MouseEvent arg0) {

}

}

Et ensuite voici le contenu du fichier Carousel.java qui utilise les packages ListenerAvance et ListenerReculer:

package fr.julien.caroussel;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JPanel;

import fr.julien.caroussel.listener.ListenerAvancer;
import fr.julien.caroussel.listener.ListenerReculer;
/**
* Classe definissant le Carroussel permettant de faire défiler les images
*
* Cette classe est caractérisée par les informations suivantes
*

* * un nombre de composants visibles</li>
*
* les composants à afficher

*

*

*
* @author Julien
* @version 1.0
*
*/
public class Carousel extends JPanel {

/**
* L'uid
*/
private static final long serialVersionUID = 954320876901301631L;

/**
* La liste des panels à afficher
*/
private List<JPanel> composants;

/**
* Le nombre de panels visibles
*/
private int nbVisibles;

/**
* L'indice du premier panel visible
*/
private int curseur;

/**
* Le panel dans lequel sont affichés les composants
*/
private JPanel affichage;

/**
* Le GridBagConstraits de affichage
*/
private GridBagConstraints gc;

/**
* Constructeur de Caroussel
* @param nbVisibles
* Le nombre de panels visibles
* @param composants
* Les panels à afficher
*/
public Carousel(int nbVisibles, List<JPanel> composants){
this.nbVisibles = nbVisibles;
this.composants = new ArrayList<JPanel>();
for(JPanel p : composants){
JPanel c = new JPanel(new GridLayout(1,0));
c.add(p);
c.setBorder(BorderFactory.createEtchedBorder());
this.composants.add(c);
}
curseur=0;
affichage = new JPanel();
affichage.setOpaque(false);
affichage.setLayout(new GridBagLayout());
gc = new GridBagConstraints();
gc.insets = new Insets(7, 7, 7, 7);
gc.fill=GridBagConstraints.BOTH;
gc.weighty=1;
gc.weightx=nbVisibles;
gc.gridy=0;
dessiner();
setLayout(new BorderLayout());
setBackground(Color.WHITE);
Entete entete = new Entete();
entete.getGauche().addMouseListener(new ListenerReculer(this));
entete.getDroite().addMouseListener(new ListenerAvancer(this));
add(entete, BorderLayout.NORTH);
add(affichage, BorderLayout.CENTER);
}

/**
* Méthode qui permet d'avancer le curseur de 1
*/
public void avancer(){
if(curseur<composants.size()-nbVisibles){
curseur++;
dessiner();
}
}

/**
* Méthode qui permet de reculer le curseur de 1
*/
public void reculer(){
if(curseur>0){
curseur--;
dessiner();
}
}

/**
* Méthode qui dessine les panels en fonction de la
* position du curseur
*/
public void dessiner(){
affichage.removeAll();
for(int i=curseur; i<curseur+nbVisibles; i++){
gc.gridx=i-curseur;
affichage.add(composants.get(i), gc);
}
affichage.validate();
affichage.repaint();
}

}

et l'on constate que pour que ça puisse marcher sans problème il faut mettre les instructions bien sur du fichier Carousel.java en commentaire:

import fr.julien.caroussel.listener.ListenerAvancer;
import fr.julien.caroussel.listener.ListenerReculer;
entete.getGauche().addMouseListener(new ListenerReculer(this));
entete.getDroite().addMouseListener(new ListenerAvancer(this));

Et ensuite compiler le programme et allez dans les fichiers ListenerAvancer.java et ListenerReculer.java les compiler sans problème et enfin retirer les commentaires précédemment mis pour visualiser le résultat.
Je pense que j'ai mieux exprimer où se situe le problème maintenant? =)

Bonne journée
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 sept. 2011 à 19:36
Peux tu me donner la trace de l'erreur stp ?
cs_vinceslas Messages postés 12 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 31 mai 2013
19 sept. 2011 à 20:49
Bonsoir,
Effectivement en exécutant la source normalement ca produit ce type d'erreur et il a fallut mettre certains lignes en commentaire dans l'un des fichiers et compiler avant que ca ne marche!!!
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 sept. 2011 à 10:53
Bonjour,

As tu testé la source et constaté que cette exception était levée ou ou penses tu que cette exception va être levée ?

Je pense que tu dois être plutôt dans le deuxième cas, et je dirais aussi que ta facon de penser est plus proche du c++ que de java non ?
cs_vinceslas Messages postés 12 Date d'inscription vendredi 25 décembre 2009 Statut Membre Dernière intervention 31 mai 2013
16 sept. 2011 à 09:35
Bonjour,
La source est très intéressante mais il y a des soucis lors de l’exécution. La classe Caroussel importe les packages ListenerAvancer et ListenerReculer. Et ces même classe importe le package Caroussel. Ce qui produit forcement des erreurs du type: indefine symbole lors de l'exécution.
Merci et bonne Continuation
Rejoignez-nous