java - 为什么GridLayout不能允许组件按行和列改变?

标签 java swing layout-manager grid-layout

这可能更像是一个提示,而不是一个问题,而且我知道 this post 中描述的问题有一个解决方法。 。但我遇到了一种情况,我必须向 GridLayout 添加组件,可能会随着我的操作而扩大网格;但组件的创建和插入顺序并不整齐;我不知道什么时候我才能完成将组件插入到网格中的工作。换句话说,在 3x3 网格中,我可能会收到一个组件,放置在 (0,2) 处,然后将另一个组件放置在 (1,0) 处,然后将一个组件放置在 (0,0) 处。然后我可能会在(5,2)处得到一个并且需要放大网格。然后我可能会被告知将 (0,0) 处的行替换为其他内容。

我知道没有办法说“在 x, y 处放置一个组件”。我知道我必须构建一个 2D 数组来保存我的组件,然后每次更改时从数组中清空并重新填充网格,这在几个大型网格中经常发生,所以我而不是。我知道生活就是这样,语言就是语言,我有什么资格质疑为什么。

但是我真的很好奇。这似乎是网格支持的最基本的操作。没有它感觉就像我正在使用一个只允许您按从左到右的顺序输入值的电子表格 - 这简直就是疯狂。

我还没有拆开 GridLayout 的源代码,但是对它“必须工作”的任何天真的理解都会让我认为 add(component, row, col) 应该很容易实现。一定不是,因为 GridLayout 并不是什么新鲜事物,而且我不敢相信我是第一个认为随机访问网格是个好主意的人。所以这一定很难。但为什么呢?

我意识到理解为什么 GridLayout 的内部不能支持这一点,并不能解决任何实际问题,除了我无法停止思考这个限制是多么奇怪的问题。最后,我将得到一个并行数组,或者弄乱更复杂的 GridBagLayout,除非有人知道更好的方法。但我只是想知道为什么我必须这么做。

最佳答案

为什么不从不同的角度解决问题:

  • 使用 GridLayout 创建网格
  • JPanel 填充网格
  • 每个都使用 BorderLayout 的 JPanel
  • 将这些 JPanel 保留在原处
  • 但是交换它们在每个 BorderLayout.CENTER 位置显示的 JPanel

或者,您可以让它们使用 CardLayout,但效果是相同的

关于java - 为什么GridLayout不能允许组件按行和列改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59941334/

相关文章:

java - 在 GroupLayout 中填充多列

java - 更改 JButton 的图标

java - JFrame标题栏重叠图形

java - 在 Apache Commons Math 的程序流程中更改分布参数

java - 这个通用语法是什么意思?

java - JAVA无法解析正则表达式

java - 如何在表格行中添加按钮

java - 如何优化这种循环呢?

java - 根据要求动态切换布局管理器是一个好习惯吗?

java - 如何使用 Spring Security 3.1 更改当前用户的登录名?