2012-01-31 35 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

相關問題