0

基本上我有这个设置

    | JFrame with BorderLayout   |
    | -------------------------- |
    | JPanel with GridBagLayout  |
    | JPanel with NullLayout     |

JFrame 是可调整大小的。带有 GridBagLayout 的 JPanel 包含其自身增益 JPanel,看起来基本像这样

    |Obj|Obj|Obj|
    |Obj|Obj|Obj|
    |Obj|Obj|Obj|

网格应该是二次的。

如果我调整窗口大小,组件将自动调整,因此,网格失去它的二次维度并变成一个矩形。

我可以通过编写自己的布局管理器来防止这种情况。所以我的问题是:是否有另一种实施二次网格的可能性?

4

2 回答 2

1

GridBagLayout考虑使用MigLayout而不是使用。

您还可以使用null布局,将每个组件的宽度和高度设置为宽度或高度除以行数或列数(取决于您要如何处理),并根据以下方式设置初始值xy值:

(total width % number of columns) / 2

和其他人简单地
initialX + cellWidth * (col - 1)
initialY + cellWidth * (row - 1)

将此代码放入您componentResized(ComponentEvent e){...} 的 middle 方法中JPanelComponentListener并在您的单元格(面板)中循环设置它们的边界。这可能是一种缓慢/手动的方式,但您可以完全控制您希望它们调整大小的方式。

于 2012-01-31T14:57:31.703 回答
0

看看http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/index.html那里的示例 GridBagLayoutDemo 和 SpringGridDemo 可能会解决您的问题。或者最后一次转义,使您的窗口无法调整大小(糟糕!),就像在 GridLayoutDemo 中一样......

于 2012-01-31T14:55:52.093 回答