Supprimer un composant swing après affichage.
Résolu
ajp55
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
-
ajp55 Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
ajp55 Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je debute en programmation java et j'ai créé une application swing qui affiche une fenetre, deux panel. le premier panel contient des JLabel, le second contient des JTextField, et un button action,
le resultat est bien attendu, mais ce que je voulais aussi faire disparaitre le second panel.
j'ai fait un
je me rend compte le panel est réellement supprimé en mémoire mais visiblement, il y ait tjour.
j'ai dû faire un panel2 = new JPanel(); et refaire un add() sur la fenetre pour faire réellement disparaitre le composant.
quelqu'un peut -il m'aider a faire disparaitre le composant panel sans réallocation de mémoire.
Merci d'avance pour vos réponse.
je debute en programmation java et j'ai créé une application swing qui affiche une fenetre, deux panel. le premier panel contient des JLabel, le second contient des JTextField, et un button action,
le resultat est bien attendu, mais ce que je voulais aussi faire disparaitre le second panel.
j'ai fait un
panel2.removeAll(); puis un panel2.validate() et j'ai appelé super.validate()puisque ma classe etend le JFrame.
je me rend compte le panel est réellement supprimé en mémoire mais visiblement, il y ait tjour.
j'ai dû faire un panel2 = new JPanel(); et refaire un add() sur la fenetre pour faire réellement disparaitre le composant.
quelqu'un peut -il m'aider a faire disparaitre le composant panel sans réallocation de mémoire.
Merci d'avance pour vos réponse.
A voir également:
- Supprimer un composant swing après affichage.
- Supprimer rond bleu whatsapp - Guide
- Test composant pc - Guide
- Connaitre composant pc - Guide
- Supprimer page word - Guide
- Impossible de supprimer un fichier - Guide
3 réponses
Un remove suivi d'un repaint devrait suffire, pas besoin du reste.
Exemple :
Exemple :
public static void main(String[] args) { final JFrame frame = new JFrame(); final JLabel label = new JLabel("Je suis vivant",JLabel.CENTER); frame.add(label,BorderLayout.NORTH); final JButton button = new JButton("Tuer"); frame.add(button,BorderLayout.SOUTH); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.remove(label); frame.repaint(); } }); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
ajp55
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
23
Merci pour ta réponse, mais le problème n'est pas de supprimé le composant panel2 de la fenetre, mais de vider son contenu. parce qu'il est reutilisé apré pour affiché autre chose. j'ai donc vidé le contenu du panel2 en faisant
, mais visiblement, ça n'enleve pas le contenu, mais en mémoire ça enleve, parce que quand je refait ; il dit Null pointeur exception. cela veut dire que a bien été supprimé en mémoire, et bien ententu les autres composant, mais pas visiblement.Mon panel contient des jtextfield que j'aimerai enlever.
Merci KX, ton exemple marche parce que c'est simplement le JLabel et tu l'enleve de la fenetre. Pour mon cas, c'est un sous composant de la fenetre que je souhaite vider.il ya plusieurs panel dans le frame.getContentPane() d'une fenetre. alors, si l'on vider un de ces panels, les methodes removeAll() et validate() ne marche pas graphiquement?
Encore merci pour ton aide.
Encore merci pour ton aide.
Ma réponse va être la même : un remove et un repaint suffisent.
J'avais utilisé un exemple où le Container était la JFrame, et où le Component un Label, mais si tu préfères voici un exemple où le Container est un JPanel et les Component des JTextField, mais fondamentalement ça ne change rien :
J'avais utilisé un exemple où le Container était la JFrame, et où le Component un Label, mais si tu préfères voici un exemple où le Container est un JPanel et les Component des JTextField, mais fondamentalement ça ne change rien :
public static void main(String[] args) { final JFrame frame = new JFrame(); final JPanel panel = new JPanel(); panel.add(new JTextField("Je suis vivant",JLabel.CENTER)); panel.add(new JTextField("Moi aussi",JLabel.CENTER)); frame.add(panel,BorderLayout.NORTH); final JButton button = new JButton("Tuer"); frame.add(button,BorderLayout.SOUTH); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { panel.removeAll(); panel.repaint(); } }); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }