【发布时间】:2014-01-17 21:06:55
【问题描述】:
我最近才开始使用 Swing 为程序创建 GUI,到目前为止,玩弄它是非常有趣的。但是,我遇到了布局设置为 gridLayout 的 JPanel 的问题。现在它看起来像这样:
右侧的网格是一个设置为 GridLayout 的 JPanel,每个单元格都是一个带边框的 JLabel。左侧的选项也在 JPanel 内部,左侧 JPanel 和右侧 JPanel 嵌套在 JFrame 上设置的 GridBagLayout 中。
本质上,我的问题是我想“缩放”右侧的网格,以便每个单元格都有一定的高度和宽度。网格本身将具有可变数量的行和列,它们是在程序首次启动时设置的。最终,我计划在 JScrollPane 中使用正确的 JPanel(如果那样的话......),所以我并不真正关心是否所有的网格都显示在屏幕上。
我尝试将 gridLayout 的填充值设置为“BOTH”,结果如下:
这更接近我的意图,但我希望 JLabel 中的实际 ImageIcon 填充整个 JLabel。此外,我希望 JLabels 具有相同的高度和宽度。但是,我不知道该怎么做。我已经搞砸了一段时间了,我不确定我是否对 Swing 过于陌生,或者我是否遗漏了文档中的某些内容。 最后,我希望网格单元格具有固定的高度和宽度,无论单元格的数量是多少,无论它是离开屏幕还是不填充它。
(另外,我只是想,编写此代码然后将其推入 JScrollPane 并期望它执行相同的操作可能不是最好的主意......我想我会看看会发生什么。)
【问题讨论】:
-
如果在面板中使用 BoxLayout 来拉伸内容,它们会。或者,您可以使用另一个具有框布局的 JPanel,并用它包装您现有的面板。编辑 - 如果他们没有设置最大/首选大小,他们将填充他们的父母。
-
让 I ageIcon “填充”可用空间无法实现开箱即用,因为 JLabel 不会缩放图像。您可以覆盖“单元格”组件的 getPreferredSize 并返回您需要的值
-
感谢您的快速回复,我正在调查您的两个回复。马克,你是说我应该为每一行使用一个盒子布局,并在该盒子布局中拥有该特定行的单元格,等等?我无法想象如何将网格容纳到 BoxLayout 中。还有 MadProgrammer,你的建议让我觉得我可能对摇摆不太舒服,无法完成这项工作。
-
我认为你应该听从 MadProgrammers 的建议,他比我更了解你的问题,并且鉴于他的代表和挥杆经验,很可能有你想要的解决方案。
-
好的,是的,我正在调查。谢谢你的建议,马克!我真的很感激。
标签: java swing user-interface scaling