Java GridBayLayout替换组件
我试图使用GridBagLayout删除JPanel中的多个组件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);
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);