2013-06-22 27 views
3

這就是我想實現:GridBagLayout行爲不當。水平分佈問題

|--0--|--1--|--2--|--3--|--4--|--5--|--6--|--7--|--8--|--9--| 
0 |  |JLabe|l----|-----|-----|-----|-----|-----|-----|-----| 
1 |  |  |JLabe|l----|-----|-----|-----|-----|-----|-----| 
2 |  |  |  |JLabe|l----|-----|-----|-----|-----|-----| 
3 |  |  |  |JLabe|l----|-----|-----|-----|-----|-----| 

這是我迄今爲止得到的,這是接近我能得到什麼,我之後。

 center.setLayout(centerLayout); 
    JPanel[] card = new JPanel[1]; //update as it gets longer, eventually Scoreboard.LENGTH 
    card[0] = new JPanel(); 
    GridBagLayout cardLayout = new GridBagLayout(); 
    card[0].setLayout(cardLayout); 
    cardLayout.setConstraints(winner, new GridBagConstraints(0, 0, 10, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0)); 
    card[0].add(winner); 
    cardLayout.setConstraints(name, new GridBagConstraints(1, 1, 9, 1, 0.8, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0)); 
    card[0].add(name); 
    cardLayout.setConstraints(with, new GridBagConstraints(2, 2, 8, 1, 0.7, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0)); 
    card[0].add(with); 
    cardLayout.setConstraints(score, new GridBagConstraints(2, 3, 8, 1, 0.7, 0, GridBagConstraints.LAST_LINE_START, GridBagConstraints.NONE, new Insets(0,0,0,0), 0, 0)); 
    card[0].add(score); 
    center.add(card[0], "card1"); 
    this.getContentPane().add(center); 

,由於某種原因它顯示是這樣的:

|--0--|--1--|--2--|--3--|--4--|--5--|--6--|--7--|--8--|--9--| 
0 |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----| 
1 |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----| 
2 |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----| 
3 |JLabe|l----|-----|-----|-----|-----|-----|-----|-----|-----| 

或許有展示我的文字比使用GridBagLayout的一個更合適的方式。 (它需要在不同的分辨率下工作,所以使用的佈局管理器需要靈活)

+0

爲什麼'GridLayout'沒有'0,0','1,0','1,1'等空單元格。 – trashgod

+0

[Overlap Layout](http://tips4java.wordpress.com/ 2009/07/26/overlap-layout /)by @camickr? –

回答

1

1)命名GridBagLayout變量「cardLayout」不是最好的主意,IMO。

2)既然你只給了一段代碼,並沒有提供SSCCE,我只能根據你給出的「圖片」進行猜測。 GridBagLayout需要每行/列中有一個組件來定義它的大小。給定的列將與該列中具有最寬的首選大小的組件一樣寬。身高也一樣。因此,根據結果的圖片,沒有首選寬度的組件位於列0中。一種解決方法是將Box.createHorizontalStrut(someWidth)放置在所需的列中。