Detruire objet JPanel et ce qu'il contient

Résolu
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009 - 20 déc. 2004 à 12:26
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre 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

8 réponses

poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
20 déc. 2004 à 18:55
Ca marche! Je ne sais pas comment te remercier.
3
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
20 déc. 2004 à 13:45
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]
0
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
20 déc. 2004 à 14:24
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));

}
0
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
20 déc. 2004 à 14:26
En fait lorsque on clique sur calculer, ça lance makeCenterPanel() mais en changeant MAX...
Et le centerPanel parait figé...
Merci de ton aide.
0

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

Posez votre question
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
20 déc. 2004 à 14:41
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...

@++
0
poiuytrez3 Messages postés 150 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 17 mars 2009
20 déc. 2004 à 15:03
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.
0
Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
20 déc. 2004 à 15:46
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.

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

@++
0
Rejoignez-nous