Aquí es una pieza de código ejecutable de explicar el problema -componente dinámica de la eliminación de JPanel
puedo quitar S1 y S2, pero no s3.
Esto no parece estar relacionado con MigLayout (lo estoy usando) ya que también veo el mismo comportamiento con el diseño predeterminado.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
public class MyFrame2 extends JFrame {
private JPanel main;
private JPanel s1;
private JPanel s2;
private JPanel s3;
public static void main(String[] args) throws InterruptedException {
MyFrame2 f = new MyFrame2();
f.setVisible(true);
Thread.sleep(2000); //you can see all three panels for two seconds
f.main.remove(f.s1);
f.main.validate();
Thread.sleep(2000);
f.main.remove(f.s2);
f.main.validate();
Thread.sleep(2000);
f.main.remove(f.s3);
f.main.validate();
}
public MyFrame2() {
main = new JPanel();
main.setLayout(new MigLayout());
main.add(new JLabel("Why does s3 not disappear?"),"w 200, h 100, wrap");
s1 = new JPanel();
s1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY,1),"s1"));
main.add(s1,"w 90%, h 300, wrap");
s2 = new JPanel();
s2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY,1),"s2"));
main.add(s2,"w 90%, h 300, wrap");
s3 = new JPanel();
s3.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.GRAY,1),"s3"));
main.add(s3,"w 90%, h 300, wrap");
getContentPane().setLayout(new BorderLayout());
getContentPane().add(main, BorderLayout.CENTER);
setSize(new Dimension(800, 600));
}
}
Gracias. ¡Funciona! (+1) ¿puedes por favor elaborar un poco? ¿Por qué la última validación no cambia el diseño mientras que todas las validaciones anteriores lo hacen? (Claramente, no hago mucho desarrollo de balanceo) –
La última validación * no * cambia el diseño; simplemente no lo ves. El último componente se ha eliminado de hecho después de la llamada para validar, pero debe volver a pintar el componente para ver la prueba visual de esta eliminación. –
@HovercraftFullOfEels: gracias. –