[JAVA]pb avec CardLayout

Fermé
david - 31 mai 2005 à 11:20
 david - 31 mai 2005 à 14:46
Bonjour voila g un probleme pour passer d'un panneau a un autre a l'aide d'un bouton. Si qqun aurai des informations sur l'utilisation du CardLayout ou si qqun peut m'aider et me dire comment changer de panneau, merci. Je n'ai aucune erreur de compil ou d'execution mais rien ne se passe. voila mon code donc si qqun a une idée qu'il n'hésite pas:

public class InterfaceMenu extends JFrame implements ActionListener {
	
	private PanneauVert panneauVert;
	private PanneauJaune panneauJaune;
	private CardLayout cl;
	
	public InterfaceMenu(String titre) {
		
		super(titre);
		cl = new CardLayout();
		this.getContentPane().setLayout(cl);
		this.getContentPane().setBackground(Color.red);
		
		panneauVert = new PanneauVert();
		this.getContentPane().add(panneauVert, "Paneau vert");
		
		panneauJaune = new PanneauJaune();
		this.getContentPane().add(panneauJaune, "Paneau jaune");
		
		panneauVert.bouton1.addActionListener(this);
		panneauJaune.bouton1.addActionListener(this);
		
		//this.getContentPane().setVisible(true);
		this.setVisible(true);
		this.pack();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}
	
	public void actionPerformed(ActionEvent e) {
	
		if(e.getSource() == panneauVert.bouton1)
			cl.show(this.getContentPane(), panneauJaune.getName());
		
		if(e.getSource() == panneauJaune.bouton1)
			cl.show(this.getContentPane(), panneauVert.getName());
	}


class PanneauVert extends JPanel {
	
	protected JButton bouton1;
	
	public PanneauVert() {
		
		this.setBackground(Color.green);
		
		bouton1 = new JButton("Jaune");
		this.add("North", bouton1);
		
		this.setVisible(true);
	}


lass PanneauJaune extends JPanel {
	
	protected JButton bouton1;
	
	public PanneauJaune() {
		
		this.setBackground(Color.yellow);
		bouton1 = new JButton("Vert");
		this.add("South", bouton1);
		
		this.setVisible(true);
	}
A voir également:

11 réponses

jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
31 mai 2005 à 11:28
Que veux-tu faire exactement ? Quel est le but de ton prog ?
Il n'y a pas de main() dans tes classes...

0
bonjour,

ça ça ne marcheras peut etre pas :
if(e.getSource() == panneauVert.bouton1)

t bouton sont en protected donc pour y accéder il faut InterfaceMenu hérite de tes classes PanneauX ou alors met en public tes boutons!

C'est que jvois comme erreurs possibles

Essayes pour voir si ça corrige ton problème

Bon courage
0
ben en fait g deux panneau qui sont sur un frame et je voudrai passer d'un panneau qui est vert a un panneau jaune grace a un bouton. Programme sans interet si ce né que de voir le fonctionnement du cardlayout é comment changer de panneau. Voila. Je né pa mi tou le code la c pour sa qu'il n'y pa de fonction main.

Pour les boutons il n'y pas de problemes d'accé vu quils sont dans le mm package que la class InterfaceMenu.
Merci si qqun peut m'aider
0
ok dsl javé pas vu ke t paneaux été a lintérieur de ta class principale

bon sinon jvé tester ton code et essayer de le debuggé

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ça marche en utilisant une autre méthode que show

voici ce que dit la doc sur :

public Component add(String name,
Component comp)Adds the specified component to this container. This is a convenience method for addImpl(java.awt.Component, java.lang.Object, int).

This method is obsolete as of 1.1. Please use the method add(Component, Object) instead.

c'est peut être pour ça que ça plante avec le show

ci-joint code

import javax.swing.JFrame;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.*;

public class InterfaceMenu
extends JFrame
implements ActionListener {

private PanneauVert panneauVert;
private PanneauJaune panneauJaune;
private CardLayout cl;

public InterfaceMenu(String titre) {

super(titre);
cl = new CardLayout();
this.getContentPane().setLayout(cl);
this.getContentPane().setBackground(Color.red);

panneauVert = new PanneauVert();
this.getContentPane().add(panneauVert, "Paneau vert");

panneauJaune = new PanneauJaune();
this.getContentPane().add(panneauJaune, "Paneau jaune");

panneauVert.bouton1.addActionListener(this);
panneauJaune.bouton1.addActionListener(this);

this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == panneauVert.bouton1) {
cl.next(this.getContentPane());

}
if (e.getSource() == panneauJaune.bouton1) {
cl.first(this.getContentPane());
}
}

class PanneauVert
extends JPanel {

protected JButton bouton1;

public PanneauVert() {

this.setBackground(Color.green);

bouton1 = new JButton("Jaune");
this.add("North", bouton1);

this.setVisible(true);
}
}

class PanneauJaune
extends JPanel {

protected JButton bouton1;

public PanneauJaune() {

this.setBackground(Color.yellow);
bouton1 = new JButton("Vert");
this.add("South", bouton1);

this.setVisible(true);
}
}
}
0
Ben ce sont 3 class distincte mais g mal fai mon copier coller donc il manque des parenthese. Dans la class InterfaceMenu g mi une méthode main dans laquel j'instancie la class InterfaceMenu. voila, merci si tu arrive a débugger.
++
0
Salu et merci en effet cela marche de cette maniere mais il est aussi possible d'utiliser la méthode show qui peut etre plus pratique si l'on veut accéder a n'importe quelle panneau en fait. La g que 2 panneau donc c simple et on peut utiliser next et previous mais si l'on a 10 panneau, et que l'on veu accéder a un panneau qui ne se trouve pa desuite apré le panneau courant il faut utiliser la méthode show.
Mon probleme vient du fait je pense que j'utilise panneauVert.getName() et que cette méthode, je pense, ne retourne pas la bonne valeur. Il me faudrai une méthode qui me permette de retourné la chaine "Panneau Vert". Si tu trouve des info la dessus sa serai cool, je continue de cherché moi merci en tou k
0
ouep david

bon jviens de trouver pkoi ça planter ton code

quand tu fais ça:
this.getContentPane().add(panneauVert,"Panneau Vert");
tu n'associe pas de nom à panneauVert donc le panneauVert.getName() retourne rien ce qui explique que ça plante!!

donc voici la solution:

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

public class InterfaceMenu
extends JFrame
implements ActionListener {

private PanneauVert panneauVert;
private PanneauJaune panneauJaune;
private CardLayout cl;

public InterfaceMenu(String titre) {

super(titre);

panneauVert = new PanneauVert();
panneauVert.setName("pv");

panneauJaune = new PanneauJaune();
panneauJaune.setName("pj");

cl = new CardLayout();
this.getContentPane().setLayout(cl);
this.getContentPane().setBackground(Color.red);
this.getContentPane().add(panneauVert,panneauVert.getName());
this.getContentPane().add(panneauJaune,panneauJaune.getName());

panneauVert.bouton1.addActionListener(this);
panneauJaune.bouton1.addActionListener(this);

this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == panneauVert.bouton1) {
cl.show(this.getContentPane(),panneauJaune.getName());
}
if (e.getSource() == panneauJaune.bouton1) {
cl.show(this.getContentPane(),panneauVert.getName());
}
}

class PanneauVert
extends JPanel {

protected JButton bouton1;

public PanneauVert() {

this.setBackground(Color.green);
bouton1 = new JButton("Jaune");
this.add(bouton1);
this.setVisible(true);
}
}

class PanneauJaune
extends JPanel {

protected JButton bouton1;

public PanneauJaune() {

this.setBackground(Color.yellow);
bouton1 = new JButton("Vert");
this.add(bouton1);
this.setVisible(true);
}
}
}

voila et la tu n'auras plus aucun problème ;)

ciao
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
31 mai 2005 à 14:21
tu peux aussi modifier / surcharger le constructeur de Paneauvert en permettant de choisir le nom en argument.
0
oui oci
du moment que tu nommes tes panneaux à un endroit que ce soit lors de leur création ou pas!
allez ciao bon courage

nb: met le statut du message comme résolu ;)
0
Ben merci bcp pour ton aide tony et les autres tro sympa, merci...sa devrait marcher nikel^^
0