为什么 GridLayout 不能让组件按行按列变化?
Why can't GridLayout allow components to be changed by row and column?
这与其说是问题,不如说是抱怨,而且我知道 this post 中描述的问题有解决方法。但是我有一种情况,我必须将组件添加到 GridLayout,可能会在我进行时扩大网格;但是组件并没有按照整齐的顺序创建和插入;而且我不知道什么时候我完成了将组件插入到网格中的工作。换句话说,在 3x3 网格中,我可能会得到一个组件放在 (0,2) 处,然后另一个组件放在 (1,0) 处,然后一个组件放在 (0,0) 处。然后我可能会在 (5,2) 处得到一个并且需要扩大网格。然后我可能会被告知用其他东西替换 (0,0) 处的行。
我明白没办法说"put a component at x, y"。我知道我将不得不构建一个二维数组来保存我的组件,然后清空并从数组中重新填充网格,每次它发生变化时,这将经常出现在几个大网格中,所以我会而不是。我知道生活就是这样,语言就是语言,我有什么资格质疑为什么。
但我真的很好奇。这似乎是网格支持的最基本的操作。没有它感觉就像我正在使用一个电子表格,它只允许您按从左到右的顺序输入值 - 这简直是疯狂。
我没有拆开 GridLayout 的源代码,但对它 "must work" 的任何天真理解都让我认为 add(component, row, col)
实现起来应该是微不足道的。它一定不是,因为 GridLayout 并不是全新的,我不敢相信我是第一个认为随机访问网格是个好主意的人。所以一定很难。但是为什么?
我意识到理解为什么 GridLayout 的内部不能支持这个,并没有解决任何实际问题,除了我无法停止思考限制从根本上是多么奇怪的问题。最后我将以并行数组结束,或者搞乱更复杂的 GridBagLayout,除非有人知道更好的方法。但我只想知道为什么我必须这样做。
为什么不换个角度解决问题:
- 使用 GridLayout 创建网格
- 用空填充网格
- 每个都使用 BorderLayout 的 JPanels
- 将这些 JPanel 保留在原处
- 但是交换它们在每个 BorderLayout.CENTER 位置显示的 JPanels
或者,您可以让他们使用 CardLayout,但效果是一样的
这与其说是问题,不如说是抱怨,而且我知道 this post 中描述的问题有解决方法。但是我有一种情况,我必须将组件添加到 GridLayout,可能会在我进行时扩大网格;但是组件并没有按照整齐的顺序创建和插入;而且我不知道什么时候我完成了将组件插入到网格中的工作。换句话说,在 3x3 网格中,我可能会得到一个组件放在 (0,2) 处,然后另一个组件放在 (1,0) 处,然后一个组件放在 (0,0) 处。然后我可能会在 (5,2) 处得到一个并且需要扩大网格。然后我可能会被告知用其他东西替换 (0,0) 处的行。
我明白没办法说"put a component at x, y"。我知道我将不得不构建一个二维数组来保存我的组件,然后清空并从数组中重新填充网格,每次它发生变化时,这将经常出现在几个大网格中,所以我会而不是。我知道生活就是这样,语言就是语言,我有什么资格质疑为什么。
但我真的很好奇。这似乎是网格支持的最基本的操作。没有它感觉就像我正在使用一个电子表格,它只允许您按从左到右的顺序输入值 - 这简直是疯狂。
我没有拆开 GridLayout 的源代码,但对它 "must work" 的任何天真理解都让我认为 add(component, row, col)
实现起来应该是微不足道的。它一定不是,因为 GridLayout 并不是全新的,我不敢相信我是第一个认为随机访问网格是个好主意的人。所以一定很难。但是为什么?
我意识到理解为什么 GridLayout 的内部不能支持这个,并没有解决任何实际问题,除了我无法停止思考限制从根本上是多么奇怪的问题。最后我将以并行数组结束,或者搞乱更复杂的 GridBagLayout,除非有人知道更好的方法。但我只想知道为什么我必须这样做。
为什么不换个角度解决问题:
- 使用 GridLayout 创建网格
- 用空填充网格
- 每个都使用 BorderLayout 的 JPanels
- 将这些 JPanel 保留在原处
- 但是交换它们在每个 BorderLayout.CENTER 位置显示的 JPanels
或者,您可以让他们使用 CardLayout,但效果是一样的