2011-10-06 32 views
0

我有一個JPanel我已經添加了幾個組件(複選框,組合)。我注意到,當框架最大化時,組件的邊界也移動或向右移動。然後,在還原時,組件將移回原始位置。如何使擺動組件的邊界固定

在21英寸及以上英寸的顯示器上,組件移位確實有所不同,因爲您可以看到組件移動得很近。

我們使用它實現java.awt.LayoutManager2定製的佈局管理器。課堂內容非常安靜,因此將指向確定組件邊界的區域。

protected int hMargin = 0; 
.. 
Insets insets = target.getInsets(); 
Dimension size = target.getSize(); 

int x = (size.width - insets.left - insets.right - 15 * hMargin); 

而且從它調用的佈局和添加組件如下所示的幀:

JPanel pl = new JPanel(new OurLayout(this)) 
//add the component to panel 
pl.add(checkBox); 
.. 

在那裏我們決定x點,我要添加的線,以防止移位元件當添加了呼叫面板的幀被最大化時。

任何人都可以提出任何想法如何實現這一目標?示例代碼將很受讚賞。

+1

查看其他佈局管理器如何執行此操作。提示:他們使用'getPreferredSize()','getMinimumSize()'和'getMaximumSize()'。 – Thomas

+0

你爲什麼要推出自己的LayoutManager?靈活且功能強大的經理難以實施,檢查三大管理公司之一(MigLayout,FormLayout,DesignGridLayout)第三方管理人員是否符合您的要求 – kleopatra

+0

可能不是您想要聽到的內容,但爲什麼要自己編排佈局管理器,有什麼你需要'SpringLayout'不能做的? – Qwerky

回答

0

感謝Thomascamickr的推薦,我已經使用下面的語法行取得了一個解決方案。

 size=c.getMinimumSize(); 
     int dist =(size.width - insets.left - insets.right); 
     int move = ((dist > 32) ? 35 : 38); 
     x = (dist + move * hMargin); 

再次感謝所有的建議。

2

如果您有自定義佈局管理器,那麼您的佈局管理器應該尊重面板的首選大小。問題出在您的佈局管理代碼上。

或者爲了簡單的解決方案,將您的自定義面板添加到使用FlowLayout的另一個面板。那麼您的自定義面板的首選尺寸將得到尊重。