【问题标题】:Java GridBayLayout replacing componentsJava GridBayLayout 替换组件
【发布时间】:2015-04-14 02:09:06
【问题描述】:

我正在尝试使用 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 个块应该彼此相邻,但这就是我得到的结果。

【问题讨论】:

  • 您的图片没有通过链接显示

标签: java swing user-interface gridbaglayout


【解决方案1】:
    gamePanel.delBlock(0, 0);
    gamePanel.delBlock(0, 1);

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

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

试试:

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

颠倒移除组件的顺序。

那总是先从容器末端移除组件。

如您所见,这 2 个块应该彼此相邻

我不知道您的意思是在垂直意义上还是水平意义上彼此“相邻”。

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

如果您希望您的组件彼此“并排”(在水平意义上),那么您需要按行顺序添加组件。

【讨论】:

  • 谢谢你,你已经回答了我的问题!但是,是否有另一种方法可以删除多个组件而不必担心颠倒顺序?
  • @AlanYu,很高兴答案有帮助。不要忘记“接受”答案,这样人们就知道问题已经解决了。您创建一个List,其中包含要删除的组件的整数值。然后您可以按相反的顺序对该列表进行排序。最后,您遍历 List 并删除组件。这需要做更多的工作,但最终结果是您无需担心将 Integer 值添加到 List 的顺序,因为排序将确保它们以正确的顺序删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
相关资源
最近更新 更多