JFrame retrait JPanels et l'ajout d'un nouveau Composite
Je currrently ont un SwingWorker qui envoie une Requête HTTP et je remplace le SwingWorker de la méthode done() pour changer le contenu dans une JFrame. Je veux essentiellement de tout supprimer et ajouter un nouveau membres de panel sur la JFrame selon les valeurs retournées par le Serveur.
Maintenant, le problème, je suis confronté est que lorsque j'invoque les méthodes suivantes ci-dessous sur la JFrame, il n'a pas d'enlever quoi que ce soit à partir de la JFrame ni en modifier le contenu à l'intérieur du Cadre.
//TODO: Investigate why JFrame content pane won't repaint.
f.removeAll();
//Pass the frame f reference only into MainDisplay, it doesn't actually do anything apart from allowing a class to add a JMenuBar on the JFrame.
f.add(new MainDisplay(f));
f.getContentPane().invalidate();
f.getContentPane().validate();
f.getContentPane().repaint();
Le correctif en cours que j'ai est ce ci-dessous, mais je préfère modifier le contenu de la JFrame, plutôt que de charger une nouvelle.
f.dispose();
f=new ApplicationFrame();
J'ai regardé à travers les réponses précédentes ici et sur Google, et certains l'utilisation de l'état de valider() ou d'annuler() tout en appelant repaint() à repeindre la JFrame.
Des suggestions/aide serait grandement appréciée.
Edit: je pense que je vais debug plus, car il doit être quelque chose va mal.
Il supprime juste le composant(s) de la monture. C'est le garbage collector de la JVM pour "supprimer" la mémoire... ou plutôt de libérer la mémoire. Le GC ne garantit pas ce qui va arriver au cours de la durée de vie de votre programme. Aussi, si les composants qui ont été supprimés sont référencés dans le programme, alors ils ne seront pas en GC (sauf dans des circonstances spéciales, à l'aide de références faibles).
OriginalL'auteur unleashed | 2011-11-23
Vous devez vous connecter pour publier un commentaire.
par exemple
OriginalL'auteur mKorbel
Vous essayez de
repaint()/validate()
le ContentPane. Avez-vous essayez de faire de même sur leJFrame
?Vous pouvez également essayer
JFrame#pack()
.OriginalL'auteur Ashwinee K Jha
modification de votre code
f.removeAll()
. Si vous vous sentez cela fait une grande différence pour le code, veuillez envisager d'élargir votre réponse pour expliquer pourquoi. Si vous venez de retirer cette ligne parce que c'est inutile, peut-être laisser un commentaire à la question de la place. Les réponses devraient proposer des solutions à la question. Les commentaires sont plus appropriés pour suggérer des améliorations à des questions ou à d'autres réponses.OriginalL'auteur isograph
Vous pouvez essayer d'utiliser
Frame.pack()
encore, il a travaillé pour moi. Ou essayez l'une do ces méthodes suivantes:OriginalL'auteur AXL