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" 彼此(在水平方向上),那么您需要按行顺序添加组件。
我正在尝试使用 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" 彼此(在水平方向上),那么您需要按行顺序添加组件。