2012-01-31 38 views
0

Basicly我有了这个设置二次的JPanel GridBagLayout的中

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

JFrame中被调整大小。使用GridBagLayout的JPanel中包含itselt获得JPanels,看起来basicly这样

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

网格应该是二次。

如果我调整窗口的大小,组件将自动调整,并因此,网格失去了它的四边形维度,并成为一个rectangel。

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

回答

1

而不是使用GridBagLayout,请考虑使用MigLayout

你也可以使用一个null布局,设置每个组件的宽度或高度由任一数量的行或列的划分的宽度和高度(取决于您要如何去做),并设置初始xy到值根据此:

(total width % number of columns)/2

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

将这个代码放到你的componentResized(ComponentEvent e){...} 中指JPanelComponentListener的方法,并通过循环的电池(板)设置它们的边界。这可能是一种缓慢/手动的方式,但您可以完全控制您希望如何调整其大小。

+0

谢谢您的回答。我无法使用外部布局管理器。使用null-layout进行手动操作只是解决它的最后一种方法;) – jwacalex 2012-01-31 16:37:30

+0

我已经搜索了很长一段时间了layoutmanagers的功能。最简单的事情就是手工实施它。谢谢 – jwacalex 2012-01-31 22:46:55

+0

希望我有一个简单的答案给你。尽管考虑'MigLayout',它真的很方便。 – rtheunissen 2012-02-01 03:42:30

0

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

+0

GridBagLayoutDemo/SpringGridDemo不包含正方形JPanel。如果我将窗口大小调整为特定大小,则这些字段为矩形 – jwacalex 2012-01-31 16:40:06

相关问题