GridBagLayout:均匀分布的单元格

时间:2010-09-12 15:35:53

标签: java swing layout-manager gridbaglayout

是否可以使用GridBagLayout管理器完全模拟GridLayout的行为?

基本上,我有一个8x8网格,其中每个单元格应具有相同的宽度和高度。 GridLayout自动执行此操作。但我想在网格中添加另一行和列,其大小与其他不一样。该行/列应占用可能遗留的所有剩余空间(因为可用大小无法均等地分配到8个单元中)。这是可能的,还是我 - 再次 - 必须使用不同的布局管理器?

修改

这是我想要实现的简单图形,简化为4个单元格: Problem graphic

有色单元格是我添加到实际网格(灰色)的单元格,其中单元格具有相同的高度和宽度x。因此网格的高度和宽度为4*x。我现在希望其他单元格具有必要的宽度/高度(minimumSize)加上完整尺寸的可用宽度/高度的其余部分。

如果更改整个面板的大小,灰色网格单元应该再次占用尽可能多的空间。

5 个答案:

答案 0 :(得分:3)

将固定单元格的weightx的{​​{1}}和weighty设置为GridBagConstraints,将0设置为fill。对于将NONE设置为fill的浮动单元格,对于应仅展开水平设置为BOTHweightx的浮动单元格,对于垂直展开的设置为1的浮动单元格到weighty

细胞只有在有任何内容时才会展开,因此您需要填充一些内容。我选择1 s并为固定单元格中的标签设置固定尺寸。调整大小时,您需要重新计算尺寸并调用JLabel重新计算布局。

以下是invalidate() x w网格的示例:

h

答案 1 :(得分:1)

如果你没有必然绑定GridBagLayout,你应该查看MigLayout库。你可以按照以下方式做点什么:

MigLayout layout = new MigLayout(
        "",         // Layout Constraints
        "[10][10][10][10]", // Column constraints
        "[10][10][10][10]");  // Row constraints

答案 2 :(得分:0)

所有值均在GridBagConstraints

中设置

如果您希望修复8x8网格,可以设置ipadxipady值。

然后将新行/列的weightxweighty值设置为1.0,并将fill设置为FULL

您的额外行/列将展开剩余的空间。

如果你想要扩展8x8网格,那就更复杂了。除了ipadxipady值之外,您还可以调整weightxweighty值。或者为8x8网格制作一个面板,并在那里使用GridLayout。使用面板上的GridBagLayout和其他行/列。

答案 3 :(得分:0)

你有没有理由不在JTable中这样做?看起来就像它所做的那样。使用适当的单元格渲染器,您可以在单元格中放置任何内容。

http://www.java2s.com/Code/Java/Swing-Components/TableRowHeaderExample.htm

答案 4 :(得分:-2)

在使用内置布局管理器尝试了许多不同的事情之后,我决定为这个问题创建一个自定义布局管理器。我还没有这样做,因为我没有时间继续这个项目,但是当我完成它时,我会确保在这里发布布局管理器代码,以便任何对类似解决方案感兴趣的人可以使用它。

修改

didxga 在评论中提醒我,我想发布我的解决方案。然而,在从后面挖掘项目并查看它之后,我实际上无法发布我的解决方案,因为事实证明我从来没有创建它!

这是一个单一的项目,于2010年9月中旬正式完成。我们实际上想继续研究它,这可能就是为什么我说我会发布它(因为这是我想改进的一件事),但我们从来没有真正做到这一点 - 遗憾的是。相反,我只是省略了那些额外的列和行(这意味着行/列btw的标签)。

所以是的,我非常抱歉我不能发布一个我最初想要的布局... :(也许如果有足够的请求这样的布局,我会创建它,但截至目前,我不是真的愿意再次深入Java布局;)