我正在尝试一些非常基本的东西:我有一个包含 5 个按钮的列表。它们在 FlowLayout 中,一般的想法应该是,一旦我单击一个它就会消失,而其他的应该相应地重新排序。
现在,如果我调用 setVisible(false) 按钮变得不可见,但它仍然占用它在 Layoutmanager 中的空间。
有没有办法在隐藏它的同时将 Button 保留在 JPanel 中,这样它就不会被 Layout 拾取?
更新::感谢所有答案,删除按钮的问题在于顺序很重要。我试图解决的问题是在您键入 szenario 时发现一个很长的按钮列表,其中筛选出与输入的字符匹配的按钮列表,以便用户可以轻松单击它们。由于用户可以从搜索字段中删除字符,因此排序很重要,一旦再次匹配,按钮必须重新弹出。
对我来说很好用。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FlowLayoutInvisible extends JFrame
implements ActionListener
{
JPanel north;
int i;
public FlowLayoutInvisible()
{
north = new JPanel();
for (int i = 0; i < 5; i++)
{
JButton button = new JButton("North - " + i);
button.addActionListener(this);
north.add(button);
}
getContentPane().add(north, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e)
{
Component c = (Component)e.getSource();
c.setVisible(false);
((JPanel)c.getParent()).revalidate();
}
public static void main(String[] args)
{
FlowLayoutInvisible frame = new FlowLayoutInvisible();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要更多帮助,请发布您的SSCCE .
更新:我不知道是否需要 revalidate()。我似乎曾经遇到过问题,但现在我无法复制该问题。