Attualmente ho uno SwingWorker che invia una richiesta HTTP e sostituisco il metodo done() di SwingWorker per modificare i contenuti in una JFrame. Voglio sostanzialmente rimuovere tutto e aggiungere un nuovo pannello membri su JFrame a seconda dei valori restituiti dal server.JFrame rimozione di JPanel e aggiunta di un nuovo JPanel
Ora, il problema che sto affrontando è che quando invoco i seguenti metodi su JFrame, non rimuove nulla da JFrame né cambia i contenuti contenuti nel Frame.
//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();
La correzione corrente che ho è questo qui sotto ma preferirei cambiare il contenuto del JFrame piuttosto che il caricamento di un nuovo uno.
f.dispose();
f=new ApplicationFrame();
Ho guardato attraverso risposte precedenti su questo sito e su Google e alcuni usano stato validate() o invalidate() mentre chiamando ridipingere() per ridipingere il JFrame.
Qualsiasi suggerimento/aiuto sarebbe molto apprezzato.
Edit: Penso che sto andando a eseguire il debug di più poiché ci deve essere qualcos'altro che va storto.
Qualcuno sa se l'utilizzo di rimuovere o rimuovereTutti rimuove la memoria effettiva situata per Pannelli/Pannelli su una cornice? o lo rimuove dal Frame? – unleashed
Rimuove solo i componenti dal telaio. Spetta al garbage collector JVM "rimuovere" la memoria ... o piuttosto rilasciare la memoria. Il GC non garantisce che ciò accada durante la vita del tuo programma. Inoltre, se i componenti che sono stati rimossi vengono referenziati altrove nel programma, non saranno GC (tranne in circostanze particolari che utilizzano riferimenti deboli). – Jason