gpt4 book ai didi

java - 从 BoxLayout 中移除时组件不会移动

转载 作者:行者123 更新时间:2023-12-02 17:15:32 25 4
gpt4 key购买 nike

我正在使用 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();
}
});
}

但是,这样做时,即使有问题的标签已从布局中删除,其他组件也不会向上移动以覆盖其空间,直到我调整框架大小。我尝试在移除组件后重新绘制框架,但没有成功 - 标签不再显示,但仍然存在原来的间隙。

除了每次删除组件时自动调整窗口大小的明显可怕的困境之外,我如何获得所需的行为?

最佳答案

您需要调用validate()也在 frame 上。

<小时/>
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(l);
frame.validate();
frame.repaint();
}
});

关于java - 从 BoxLayout 中移除时组件不会移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6844939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com