GridBagLayout中的二次JPanel

时间:2012-01-31 14:39:28

标签: java swing gridbaglayout

基本上我已经有了这个设置

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

JFrame可调整大小。带GridBagLayout的JPanel包含itselt获得JPanels,看起来基本上像这样

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

网格应该是二次的。

如果我调整窗口的大小,组件将自动调整,因此,Grid会失去它的qudratic维度并成为rectangel。

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

2 个答案:

答案 0 :(得分:1)

请考虑使用MigLayout

,而不是使用GridBagLayout

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

(total width % number of columns) / 2

和其他人只需要initialX + cellWidth * (col - 1)
initialY + cellWidth * (row - 1)

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

答案 1 :(得分:0)

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