Java GridBagLayout替换组件

时间:2015-04-14 02:09:07

标签: 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);
        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个街区应该是彼此相邻的,但这就是我得到的结果。

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

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

尝试:

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

以反转删除组件的顺序。

总是首先从容器的末尾删除组件。

  

正如您所看到的,2个街区应该是彼此相邻的

我不知道你是指在垂直意义上还是横向意义上“彼此相邻”。

鉴于已从第一列中删除了两个组件,您似乎按列顺序构建网格。那就是你添加第1列的所有组件,然后是第2列,然后是第3列等。

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