在Java Swing中从布局隐藏按钮

我正在尝试一些非常基本的东西:我列出了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);

}

}

如果您需要更多帮助,请发布SSCCE。

更新:我不知道是否需要revalidate()。我似乎曾经有过一个问题,但现在我无法重复这个问题。

以上是 在Java Swing中从布局隐藏按钮 的全部内容, 来源链接: utcz.com/qa/427430.html

回到顶部