gpt4 book ai didi

java - 从 Pane 中删除元素时,阻止 GridBagLayout 调整列/行的大小?

转载 作者:行者123 更新时间:2023-12-01 22:04:42 25 4
gpt4 key购买 nike

我正在制作一个简单的游戏,用户单击即可删除按钮,但是当删除按钮时,我在调整 GridBagLayout 大小时遇到​​了一些问题。

默认窗口如下所示:

default window

当单击一个按钮时,它将被删除:

some buttons removed

但是,当删除行/列中的每个按钮时,网格袋会调整大小并且按钮会变大:

weird resizing weird resizing 2

有什么办法可以防止这种行为发生吗? IE。在网格袋中添加填充以保持所有列/行的分布,就像它们最初在未填充区域中带有空白一样?

此外,这是我的一些代码:

public void actionPerformed(ActionEvent e)
{
// if we're not selecting multiple buttons and we're not clicking
// the "select multiple" checkbox
if ( !multiSelectState && e.getActionCommand() != "Select Multiple" )
{
JButton button = (JButton)e.getSource();
p.remove(button);
p.revalidate();
p.repaint();
}
}

最佳答案

Is there a way I can prevent this behavior from happening?

您可以使用GridLayout。然后你就可以使用:

button.setVisible( false );

并且该空间将在网格中保留。

否则,您需要通过向网格添加虚拟组件来保留网格中的空间(GridBagLayout 布局中不包含不可见组件)。

一种选择是用空面板替换按钮,因此代码可能类似于:

JPanel panel = new JPanel();
panel.setPreferredSize( button.getPreferredSize() );
GridBagLayout layout = (GridBagLayout)p.getLayout();
GridBagConstraints gbc = layout.getConstraints( button );
p.remove(button);
p.add(panel, gbc);
p.revalidate();
p.repaint();

另一种方法是使用带有 CardLayout 的面板。然后这个面板将包含您的 JButton 和一个空的 JPanel。

然后,您无需从布局中删除 JButton,只需交换按钮并显示空面板即可。阅读 Swing 教程中关于 How to Use CardLayout 的部分了解更多信息。

关于java - 从 Pane 中删除元素时,阻止 GridBagLayout 调整列/行的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019855/

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