Insérer Jpanel dans un autre Jpanel

ekin0xX Messages postés 2 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 25 avril 2012 - 24 avril 2012 à 23:34
 Utilisateur anonyme - 12 juin 2012 à 13:50
Bonjour à tous,

Après avoir chercher un peu partout et n'ayant toujours pas réussi à résoudre mon problème je m'oriente vers vous.

Dans mon cas, j'ai une frame qui est composé d'un Jpanel avec des boutons et un autre Jpanel à l'intérieur qui est le contenu modifiable par l'action des boutons.

En gros voici la hiérarchie de l'interface :

Jframe > JPanel1 >> JButton + JPanel2

J'aimerai pouvoir actualiser le contenu de mon Jpanel2 en appelant une classe qui étend Jpanel et où j'ai déjà défini les boutons etc.

Dans un premier temps j'ai essayé le code ci-dessous pour supprimer le contenu de mon JPanel2 :

jPanel2.removeAll();
this.invalidate(); 
this.repaint();


Et c'est là que ça bloque avec le code suivant :

jPanel2.add(new testPanel());
jPanel2.revalidate();
jPanel2.invalidate();
this.repaint();


Une petite idée ?
A voir également:

10 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
25 avril 2012 à 08:12
Salut,

Si je ne me trompe, tu dois redonner à ton panel un layoutManager (lui aussi enlever avec le removeAll() )
jPanel2.setLayout(new FlowLayout());
jPanel2.add(new testPanel()); //Selon la norme, le nom d'une classe commence pas une majuscule...
0
ekin0xX Messages postés 2 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 25 avril 2012
25 avril 2012 à 11:52
Je ne saurais comment te remercier, cela fonctionne en effet à merveille !

Bonne journée, et à bientôt.
0
Utilisateur anonyme
26 avril 2012 à 22:01
Passe ton sujet en résolu dans ce cas en cliquant sur "Réponse acceptée"


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
cs_boujrad Messages postés 1 Date d'inscription mardi 27 mars 2012 Statut Membre Dernière intervention 3 mai 2012
3 mai 2012 à 13:39
bonjour,

bonjour,
j'ai un petit souci concernant le sleep pour les boutons, en fait quand je clique sur mon premier bouton j(arrive a voir l'image mais quand je clique sur le 2eme je n'arrive pas a la voir.
voila le code que j'ai utilisé.


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import static java.util.Collections.*;
import java.awt.GridLayout;
public class Memoire extends JFrame implements ActionListener {
private JPanel pan = new JPanel();
private JButton[] safae = new JButton[16];
private ImageIcon[] safaee= new ImageIcon[16];
public ArrayList listeImage = new ArrayList();
private int counter = 0;
private int[] btnID = new int[2]; //0
private int pairesTrouvee = 0;
ImageIcon i0 = new ImageIcon("1.png");
ImageIcon i1= new ImageIcon("2.jpeg");
ImageIcon i2= new ImageIcon("3.jpeg");
ImageIcon i3= new ImageIcon("4.jpeg");
ImageIcon i4= new ImageIcon("5.jpeg");
ImageIcon i5= new ImageIcon("6.jpeg");
ImageIcon i6= new ImageIcon("7.jpeg");
ImageIcon i7= new ImageIcon("8.jpeg");
ImageIcon i8= new ImageIcon("9.jpeg");
ImageIcon i9=i1;
ImageIcon i10=i2;
ImageIcon i11=i3;
ImageIcon i12=i4;
ImageIcon i13=i5;
ImageIcon i14=i6;
ImageIcon i15= i7;
ImageIcon i16= i8;
public Memoire(){
init();
panel();
//setArrayListText();
setArrayImageIcon();
this.setTitle("Jeux de Memoire");
this.setSize(400, 500);
//this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(pan);
}
public void init() {
for (int i = 0; i < safae.length; i++) {
//safae[i]=new JButton(safaee[i]);
safae[i] = new JButton();
safae[i].setFont(new Font("Serif", Font.BOLD, 28));
safae[i].addActionListener(this);
safae[i].setIcon(i0);
}
listeImage.add(i1);
listeImage.add(i2);
listeImage.add(i3);
listeImage.add(i4);
listeImage.add(i5);
listeImage.add(i6);
listeImage.add(i7);
listeImage.add(i8);
listeImage.add(i1);
listeImage.add(i2);
listeImage.add(i3);
listeImage.add(i4);
listeImage.add(i5);
listeImage.add(i6);
listeImage.add(i7);
listeImage.add(i8);
}
public void panel() {
//Panel gamePnl = new Panel();
pan.setLayout(new GridLayout(4, 0));
//this.setLayout(new GridLayout(4, 0));
for (int i = 0; i < safae.length; i++) {
pan.add(safae[i]);
}
}
public void setArrayImageIcon() {
for (int i = 0; i <2; i++) {
for (int ii = 1; ii < (safaee.length/2); ii++) {
//listeImage.add(safaee[ii]);
shuffle(listeImage);
}
}
}

public boolean sameValues() {
if (safae[btnID[0]].getIcon().equals(safae[btnID[1]].getIcon())) {
return true;
}
return false;
}
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < safae.length; i++) {
if (safae[i] == e.getSource()) {
//System.out.println(i);
if (counter == 1) {
btnID[1] = i;
safae[i].setEnabled(false);
safae[i].setIcon(listeImage.get(i));
safae[i].revalidate();
safae[i].validate();
safae[i].repaint();
pan.invalidate();
pan.validate();
pan.repaint();
pan.updateUI();
//System.out.println(btnID[0]+" "+btnID[1]);
if (sameValues()) {
pairesTrouvee++;
System.out.println("gagner");
safae[btnID[0]].setEnabled(false);
safae[btnID[1]].setEnabled(false);
if(pairesTrouvee == 8)
JOptionPane.showConfirmDialog(this, "WIN");
} else {
System.out.println("perdu");
try {
Thread.sleep(200);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
safae[btnID[0]].setEnabled(true);
safae[btnID[0]].setIcon(i0);
safae[btnID[1]].setEnabled(true);
safae[btnID[1]].setIcon(i0);
}
counter = 0;
}
else if (counter == 0) {
//System.out.println("tour de piste");
safae[i].setIcon(listeImage.get(i));
safae[i].setEnabled(false);
btnID[0] = i;
counter++;
}
}
}
}
public static void main(String[] args){
new Memoire().setVisible(true);
}
}
0

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

Posez votre question
Utilisateur anonyme
5 mai 2012 à 00:10
Va refaire plutôt un autre sujet au lieu de compléter celui-ci car ce sont des problèmes différents.
Et profites en pour :

1/ commenter ton code car il est très long et ne donne pas envie d'être lu surtout qu'on ne sait rien de ton programme
2/ utiliser les balises d'affichage du code car là c'est illisible
3/ raccourcir ton code qui est trop long, on a peut être pas besoin de tout ce code
4/ décrire précisement ton problème !


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
jubaben Messages postés 4 Date d'inscription mardi 3 février 2009 Statut Membre Dernière intervention 7 juin 2012
4 juin 2012 à 22:01
bonjour,
j'ai un Graphics sur JPanel et je veux l'afficher sur JFrame sachant que j'ai sur celle-ci un JPanel en haut, un JPanel en milieu et deux boutons en bas.
j'ai essayé d'ajouter le graphe dans le JPanel du milieu mais il ne s'affiche pas.
panneau.add(graphe);
y a t-il une solution?
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
5 juin 2012 à 08:48
Qu'est-ce que c'est comme objet ce Graphics? celui de java?
0
jubaben Messages postés 4 Date d'inscription mardi 3 février 2009 Statut Membre Dernière intervention 7 juin 2012
5 juin 2012 à 19:38
bonjour,
en faite, j'utilise netbeans pour écrire l'application de mon pfd. donc j'ai un graphe à afficher sur un JPanel panneau de JFrame qui est générer automatiquement, j'ai essayé ça : panneau.add(graphe); // graphe est un JPanel qui contient le Graphics
merci d'avance.
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
6 juin 2012 à 08:04
salut,

Normalement il devrait... (Genre de réponse qui aide beaucoup ^^)
Tes boutons changent aussi le contenu du panneau central? es-tu certain d'avoir un layout dans ce panneau central?
si juste avant tu lui donnes un layout style panneau.setLayout(new FlowLayout()); cela ne change rien?
0
Utilisateur anonyme
12 juin 2012 à 13:50
En relisant les posts précédents, je ne vois pas le rapport entre Graphics et ton graphe.
Sinon, vérifications bateau, vérifie si graphe est instancié proprement avec de bonnes dimensions, ... Et, s'il n'est pas appelé automatiquement, utilise la méthode repaint() defois que...


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
Rejoignez-nous