Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当从窗格中删除元素时,是否阻止GridBagLayout调整列/行的大小?_Java_Swing_User Interface_Gridbaglayout - Fatal编程技术网

Java 当从窗格中删除元素时,是否阻止GridBagLayout调整列/行的大小?

Java 当从窗格中删除元素时,是否阻止GridBagLayout调整列/行的大小?,java,swing,user-interface,gridbaglayout,Java,Swing,User Interface,Gridbaglayout,我正在制作一个简单的游戏,用户点击移除按钮,但是当按钮被移除时,我的GridBagLayout在调整大小方面遇到了一些问题 默认窗口如下所示: 单击一个按钮时,该按钮将被删除: 但是,当删除行/列中的每个按钮时,gridbag会调整大小,按钮会变大: 有什么方法可以防止这种行为发生吗?也就是说,在网格包中添加填充,以保持所有列/行的分布与原来一样,在未填充的区域中使用空格 此外,以下是我的一些代码: public void actionPerformed(ActionEvent e) {

我正在制作一个简单的游戏,用户点击移除按钮,但是当按钮被移除时,我的GridBagLayout在调整大小方面遇到了一些问题

默认窗口如下所示:

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

但是,当删除行/列中的每个按钮时,gridbag会调整大小,按钮会变大:

有什么方法可以防止这种行为发生吗?也就是说,在网格包中添加填充,以保持所有列/行的分布与原来一样,在未填充的区域中使用空格

此外,以下是我的一些代码:

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();
    }
}
有什么方法可以防止这种行为发生吗

您可以使用
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();
另一种方法是使用带有卡片布局的面板。然后这个面板将包含您的JButton和一个空的JPanel

然后,您只需交换按钮并显示空面板,而不是从布局中删除JButton。有关更多信息,请阅读上的Swing教程部分

有什么方法可以防止这种行为发生吗

您可以使用
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();
另一种方法是使用带有卡片布局的面板。然后这个面板将包含您的JButton和一个空的JPanel

然后,您只需交换按钮并显示空面板,而不是从布局中删除JButton。有关更多信息,请阅读上的Swing教程部分

有什么方法可以防止这种行为发生吗

您可以使用
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();
另一种方法是使用带有卡片布局的面板。然后这个面板将包含您的JButton和一个空的JPanel

然后,您只需交换按钮并显示空面板,而不是从布局中删除JButton。有关更多信息,请阅读上的Swing教程部分

有什么方法可以防止这种行为发生吗

您可以使用
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();
另一种方法是使用带有卡片布局的面板。然后这个面板将包含您的JButton和一个空的JPanel

然后,您只需交换按钮并显示空面板,而不是从布局中删除JButton。有关更多信息,请阅读上的Swing教程部分