Я использую BoxLayout и удаляю из него компоненты динамически, что-то вроде этого:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
final JLabel l = new JLabel("remove");
frame.add(l);
frame.add(new JLabel("Hello2"));
frame.add(new JLabel("Hello3"));
frame.pack();
frame.setVisible(true);
new Thread() {
public void run() {
Utils.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(l);
frame.repaint();
}
});
}
}.start();
}
});
}
Однако при этом, даже если рассматриваемая метка удаляется из макета, остальные компонентыне сдвигайтесь вверх, чтобы закрыть его пространство, пока я не изменю размер рамки.Я попытался перекрасить рамку после удаления компонента, но не повезло - ярлык больше не отображается, но все еще есть пробел, на котором он был раньше.
Помимо явно ужасной причины автоматического изменения размера окна каждый раз, когдакомпонент удален, как мне получить желаемое поведение?