Java GridBayLayout 替换组件

Java GridBayLayout replacing components

我正在尝试使用 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();

}

如您所见,这 2 个街区应该是挨着的,但这是我得到的结果。

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

首先移除位置 0 的组件。然后所有组件在 Container 中移动 1 个位置。

然后您删除位置 1 的组件。但是,这是在您删除第一个组件之前位于位置 2 的组件。

尝试:

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

颠倒删除组件的顺序。

也就是总是先从容器尾部移除组件。

As you can see the 2 blocks should be next to one another

我分不清你说的 "next to" 是纵向还是横向。

鉴于两个组件已从第一列中删除,看来您正在按列顺序构建网格。也就是说,您添加第 1 列的所有组件,然后添加第 2 列,然后添加第 3 列等。

如果您希望您的组件 "beside" 彼此(在水平方向上),那么您需要按行顺序添加组件。