Actualmente tengo un SwingWorker que envía una solicitud HTTP y anulo el método done() de SwingWorker para cambiar los contenidos en un JFrame. Quiero básicamente eliminar todo y agregar un nuevo panel de miembros en el JFrame en función de los valores devueltos por el servidor.JFrame eliminar JPanels y agregar un nuevo JPanel
Ahora, el problema al que me enfrento es que cuando invoco los siguientes métodos a continuación en el JFrame, no elimina nada del JFrame ni cambia su contenido dentro del Marco.
//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 solución actual que tengo es esto más adelante, pero yo prefiero cambiar el contenido del JFrame en vez de cargar un nuevo uno.
f.dispose();
f=new ApplicationFrame();
He mirado a través de las respuestas anteriores de aquí y en Google y un cierto uso de validación de estado() o invalidar(), mientras que llamar a repaint() para volver a pintar el JFrame.
Cualquier sugerencia/ayuda sería muy apreciada.
Editar: Creo que voy a depurar más ya que debe haber algo más que va mal.
¿Alguien sabe si el uso de eliminar o eliminarTodo elimina la memoria real ubicada para el Panel/Paneles en un Marco? ¿o simplemente lo elimina del cuadro? – unleashed
Simplemente elimina los componentes del marco. Depende del recolector de basura de JVM "eliminar" la memoria ... o más bien desasignar la memoria. El GC no garantiza que esto ocurra durante la vida útil de su programa. Además, si los componentes que se eliminaron se mencionan en otro lugar en el programa, entonces no se GC'd (excepto en circunstancias especiales con referencias débiles). – Jason