Java GridBayLayout替换组件

Java GridBayLayout替换组件,java,swing,user-interface,gridbaglayout,Java,Swing,User Interface,Gridbaglayout,我试图使用GridBagLayout删除JPanel中的多个组件 javax.swing.SwingUtilities.invokeLater(new Runnable(){ public void run(){ createAndShowGUI(); GamePanel gamePanel = new GamePanel(frame.getContentPane()); gamePanel.delBlock(0, 0);

我试图使用GridBagLayout删除JPanel中的多个组件

javax.swing.SwingUtilities.invokeLater(new Runnable(){
    public void run(){
        createAndShowGUI();

        GamePanel gamePanel = new GamePanel(frame.getContentPane());
        gamePanel.delBlock(0, 0);
        gamePanel.delBlock(0, 1);

        frame.setContentPane(gamePanel);

    }
}); 
这是删除块的方法

public void delBlock(int x, int y){

    int location = x * row + y;
    this.remove(location);

    this.revalidate();
    this.repaint();

}
正如你所看到的,两个街区应该相邻,但这就是我得到的结果

    gamePanel.delBlock(0, 0);
    gamePanel.delBlock(0, 1);

首先删除位置0处的组件。然后,所有部件在容器中移动1个位置

然后删除位置1处的组件。但是,在删除第一个零部件之前,该零部件位于位置2

尝试:

以反转卸下零部件的顺序

也就是说,总是先从容器的末端移除组件

如您所见,这两个块应该相邻

我不知道你是指在垂直意义上的“相邻”还是在水平意义上的“相邻”

鉴于这两个组件已从第一列中删除,因此您似乎正在按列顺序构建网格。也就是说,添加列1、列2和列3的所有组件,以此类推


如果您希望组件彼此“并排”(在水平方向上),则需要按行顺序添加组件。

您的图像不会通过链接显示谢谢,您已经回答了我的问题!然而,有没有另一种方法可以让我删除多个组件而不必担心颠倒顺序?@AlanYu,很高兴答案有所帮助。别忘了“接受”答案,这样人们就知道问题已经解决了。您可以创建一个
列表
,其中包含要删除的组件的整数值。然后您可以按相反的顺序对该列表进行排序。最后,遍历列表并删除组件。这需要做更多的工作,但最终的结果是,您不必担心将整数值添加到列表中的顺序,因为排序将确保按正确的顺序删除它们。
    gamePanel.delBlock(0, 1);
    gamePanel.delBlock(0, 0);