基本上我已经有了这个设置
| 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。
我可以通过编写自己的布局管理器来防止这种情况。所以我的问题是:是否有另一种可能性来强制执行二次网格?
答案 0 :(得分:1)
请考虑使用MigLayout。
,而不是使用GridBagLayout
您还可以使用null
布局,将每个组件的宽度和高度设置为宽度或高度除以行数或列数(取决于您想要的方式),并设置初始x
和y
根据此值:
(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 ...