在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