在 Java Swing 中隐藏布局中的按钮

Tig*_*ine 2 java swing

我正在尝试一些非常基本的东西:我有一个包含 5 个按钮的列表。它们在 FlowLayout 中,一般的想法应该是,一旦我单击一个它就会消失,而其他的应该相应地重新排序。

现在,如果我调用 setVisible(false) 按钮变得不可见,但它仍然占用它在 Layoutmanager 中的空间。

有没有办法在隐藏它的同时将 Button 保留在 JPanel 中,这样它就不会被 Layout 拾取?

更新::感谢所有答案,删除按钮的问题在于顺序很重要。我试图解决的问题是在您键入 szenario 时发现一个很长的按钮列表,其中筛选出与输入的字符匹配的按钮列表,以便用户可以轻松单击它们。由于用户可以从搜索字段中删除字符,因此排序很重要,一旦再次匹配,按钮必须重新弹出。

cam*_*ckr 6

对我来说很好用。

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()。我似乎曾经遇到过问题,但现在我无法复制该问题。