Detruire objet JPanel et ce qu'il contient [Résolu]

Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
17 mars 2009
- 20 déc. 2004 à 12:26 - Dernière réponse :
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 20 déc. 2004 à 20:14
Bonjour,
J'ai fait un petit logiciel qui permet d'additionner des temps pour la course à pied. Cependant il y a un JPanel (l'espèce de tableau qui permet de rentrer les temps) qui doit être réinitialisé si l'utilisateur souhaite faire plus de tours.
Je ne sais pas comment détruire l'ancien JPanel car il est toujours à la porté du programme. Je souhaiterai détruire aussi tout ce qu'il contient (JTextFields, JLabels...). Merci de votre aide
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
17 mars 2009
- 20 déc. 2004 à 18:55
3
Merci
Ca marche! Je ne sais pas comment te remercier.

Merci poiuytrez3 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de poiuytrez3
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Dernière intervention
23 décembre 2008
- 20 déc. 2004 à 13:45
0
Merci
Slut
Déjà, pour virer tout son contenu : monpanel.removeAll();

et pour le panel, ben tu l'écrases (brutal, mais efficace)
exemple:
JPanel p = new JPanel();
....
p = new JPanel(); //Tout ce que a été fait auparavent est écrasé


Voilà

[Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
Commenter la réponse de indiana_jules
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
17 mars 2009
- 20 déc. 2004 à 14:24
0
Merci
C'est ce que je pensais mais pourtant ça marche pas, voilà mon code:

private void makeCenterPanel() // Crée le panneau central avec les temps
{
centerPanel = new JPanel();
centerPanel.setLayout(new GridBagLayout());
// Ajoute les nombres à la colonne
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;

// Crée et ajoute le titre de la colonne
JLabel lblTours = new JLabel("Tour n°");
c.gridx = 0;
c.gridy = 0;
centerPanel.add(lblTours, c);

// Crée et ajoute le titre de la deuxième colonne
JLabel lblMin = new JLabel("Minutes");
c.gridx = 1;
c.gridy = 0;
centerPanel.add(lblMin, c);

// Crée et ajoute le titre de la 3ème colonne
JLabel lblSec = new JLabel("Secondes");
c.gridx = 2;
centerPanel.add(lblSec, c);

// Crée et ajoute le titre de la quatrième colonne
JLabel lblTempsCumu = new JLabel("Temps cumulé");
c.gridx = 3;
centerPanel.add(lblTempsCumu, c);

// Crée 1ère colonne
for(int i = 1; i <= MAX; i++){
c.gridx = 0;
c.gridy = i;
centerPanel.add(new JLabel(i + ""), c);
}

// Crée la deuxième colonne
txtMin = new JTextField[MAX];

for(int i = 0; i < MAX; i++){
c.gridx = 1;
c.gridy = i + 1;
txtMin[i] = new JTextField();
txtMin[i].setText("00");
centerPanel.add(txtMin[i], c);
}

// Crée la 3èùe colonne
txtSec = new JTextField[MAX];
for(int i = 0; i <MAX; i++){
c.gridx = 2;
c.gridy = i + 1;
txtSec[i] = new JTextField();
txtSec[i].setText("00");
centerPanel.add(txtSec[i], c);
}

// Crée la 4ème colonne avec les temps cumulés
lblCumu = new JLabel[MAX];
for(int i = 0; i <MAX; i++){
c.gridx = 3;
c.gridy = i + 1;
lblCumu[i] = new JLabel("0:00:00");
lblCumu[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));
centerPanel.add(lblCumu[i], c);
}
lblCumu[MAX-1].setBorder(BorderFactory.createLineBorder(Color.RED));

}
Commenter la réponse de poiuytrez3
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
17 mars 2009
- 20 déc. 2004 à 14:26
0
Merci
En fait lorsque on clique sur calculer, ça lance makeCenterPanel() mais en changeant MAX...
Et le centerPanel parait figé...
Merci de ton aide.
Commenter la réponse de poiuytrez3
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 20 déc. 2004 à 14:41
0
Merci
Salut,

C'est parce que ton ancien JPanel a été ajouté dans ta fenêtre (je présume que tu l'as mis dans le contentPane) et que l'instruction "centerPanel = new JPanel();" au début de ta méthode makeCenterPanel() indique que la variable centerPanel ne référence plus maintenant le panel présent dans la fenêtre mais un nouveau panel.
Pour régler ce problème, il faut que tu enlèves l'ancien panel de ta fenêtre : (getContentPane(). peut-être ? faut voir dans quel conteneur tu l'as inséré) remove(centerPanel) avant d'effectuer l'instruction centerPAnel = new JPanel(). Ensuite, il te faut insérer le nouvel panel dans la fenetre (getContentPane()?).add(centerPanel). Et ne pas oublier de faire un repaint() sur le tout.

Voilà.

Et si tu veux que la taille de la fenêtre se réajuste en fonction du contenu de ton nouveau panel, appelle la méthode pack() sur ta fenêtre (JFrame ou Frame). ;)

En espérant que cela résoudra ton problème...

@++
Commenter la réponse de Madvin
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
17 mars 2009
- 20 déc. 2004 à 15:03
0
Merci
J'obtiens vide lorsque je fais comme tu dis. Voilà le code qui est exécuté lorsque on clique sur le bouton:

MAX = Integer.parseInt(txtNbTours.getText());
mainPanel.remove(centerPanel);
makeCenterPanel();
mainPanel.add(centerPanel, BorderLayout.CENTER);
mainPanel.repaint();
centerPanel.repaint();


et la fenêtre devient comme ça:

Merci, c'est sympa de m'aider.
Commenter la réponse de poiuytrez3
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 20 déc. 2004 à 15:46
0
Merci
C'est à cause de ta gestion des repaint().

Fait plutôt comme ca, en appelant la méthode pack() sur ta fenêtre , tu verras ça le fait mieux ;) : ca redimensionne ta fenêtre en fonction de la taille de ses composants et ca la redessine aussi.

MAX = Integer.parseInt(txtNbTours.getText());
if (centerPanel != null) //Vaut mieux être prudent :)
    mainPanel.remove(centerPanel);
makeCenterPanel();
mainPanel.add(centerPanel, BorderLayout.CENTER);
pack(); //Si t'es dans la fenêtre sinon maFenetre.pack();


Ca devrait marcher maintenant.

@++
Commenter la réponse de Madvin
Messages postés
123
Date d'inscription
mardi 5 août 2003
Dernière intervention
26 août 2012
- 20 déc. 2004 à 20:14
0
Merci
Ben si tu me dis que tu es satisfait ça me suffit. :)

@++
Commenter la réponse de Madvin

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.