我正在尝试使用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个街区应该是彼此相邻的,但这就是我得到的结果。
答案 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列等。
如果您希望组件彼此“旁边”(水平方向),则需要按行顺序添加组件。