2013-05-01 43 views
1

我正在使用MigLayout,我想創建一個效果,如使用BoxLayout的「glue」創建一個不可見的空間,它將靈活地填充兩個組件之間的區域。從教程:MigLayout中的膠水當量

enter image description here enter image description here

我明白,在MigLayout,差距被用於創建組件之間的空間。我可以用"gap 10"創建一個剛性空間。 MiG Layout Cheatsheet表示,我可以將push附加到約束大小上,以便使「間隙」變得「貪婪」並留出空間上的任何空位(例如"gap rel:push"),但這似乎不適用於以下代碼我已經試過:

JFrame frame = new JFrame("Test"); 
JPanel panel = new JPanel(new MigLayout()); 
JLabel label1 = new JLabel("Testing"); 
label1.setBorder(BorderFactory.createLineBorder(Color.black)); //Border to clearly show JLabel boundaries 
panel.add(label1, ""); 
JLabel label2 = new JLabel("Testing Once Again"); 
label2.setBorder(BorderFactory.createLineBorder(Color.black)); //Border to clearly show JLabel boundaries 
panel.add(label2, "gap rel:push"); 
frame.setContentPane(panel); 
frame.pack(); 
frame.setMinimumSize(new Dimension(400, 100)); 
frame.setPreferredSize(new Dimension(400, 100)); 
frame.setVisible(true); 

該款顯示器這樣的窗口: enter image description here

我希望爲"gap rel:push"參數像水平膠工作在上面的圖片,並由此推動的JLabel右側的所有到窗口右邊的路,但它不。

如何使用MigLayout獲得與BoxLayout膠水相同的效果?我濫用"gap"參數還是有其他方法可以完成它?

另外,我意識到我可以在給定的例子中使用對接,但是我想要一個沒有這樣的答案,因爲它不會在我創建的更復雜的佈局中工作。

+0

[我認爲問了解](http://stackoverflow.com/search?q=user:203657%20 [miglayout]%20is:answer) – mKorbel 2013-05-01 06:57:29

+0

我查看了所有鏈接中給出的問題據我所知,他們都沒有回答這個問題。 – Thunderforge 2013-05-02 03:06:35

+0

然後對不起,我認爲最好的自定義佈局管理器回答者 – mKorbel 2013-05-02 05:17:04

回答

2
  1. 保存你自己的一些智慧點,並在MiGLayout上啓用調試邊界:new MigLayout("debug")
  2. 這可能是差距確實推動組件分開,但佈局沒有使用所有可用空間。如果打開調試邊界,這應該很明顯。嘗試使佈局使用所有可用空間:new MigLayout("debug, fill")
  3. 您可能不希望在標籤和單元格邊緣之間放置空隙,而是在兩列之間放置空隙:new MigLayout("debug, fill", "[]rel:push[]")。使用多行佈局時,差異應該變得清晰。在這種情況下,您可能不需要fill約束:new MigLayout("debug", "[]rel:push[]")

我沒有一個方便編譯的編譯器,但我希望我已經給你一些東西來處理。

+0

我不確定在嘗試這些時是否保持'gap rel:push',但我確實。第二種選擇正是我想要的,並且也垂直居中放置物品。第三個選項使得JLabels周圍的單元格完全像它應該的那樣大,使得'rel:push'行的行爲就像我期望的那樣。將填充約束添加到該選項只會使其垂直居中;否則沒有必要。 – Thunderforge 2013-05-02 23:36:21

+0

+1從提及「調試」功能。 – tarrsalah 2013-05-04 13:26:19