2017-05-15 26 views
0

即使我讀了一些有關份量我無法刪除下面給出的代碼片段空間:搖擺的GridBagLayout不能分發(刪除)空的空間

JPanel panel = new JPanel(); 
    scrollPane.setViewportView(panel); 
    GridBagLayout gbl_panel = new GridBagLayout(); 
    GridBagConstraints gc = new GridBagConstraints(); 
    gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0}; 
    gbl_panel.rowHeights = new int[]{0, 0}; 
    gbl_panel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; 
    gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE}; 
    panel.setLayout(gbl_panel); 
    for(int i = 0;i<3;i++){ 
     gc.gridy = i; 
     panel.add(new JButton("hi"),gc); 
    } 

That's what I get

That's what I want

如果組件的總尺寸大於面板的尺寸(例如添加10個按鈕),則不存在問題。但是如果組件的總尺寸小於比面板的大小它分佈的所有空間。我想逐行設置我的組件(從頂部到底部與組件之間的任何空間) 對不便,謝謝!

+1

你的'rowWeights'數組有兩個元素。該數組中的第二個元素是非零重量,因此佈局中的第二行被分配額外空間並不奇怪。 – VGR

+0

如何刪除分配的額外空間? –

+0

爲每一行指定一個行權重。任何權重爲零的行都不會被分配額外的空間。 – VGR

回答

1

你需要GridBagConstraintsfill

從JavaDoc中

* This field is used when the component's display area is larger 
* than the component's requested size. It determines whether to 
* resize the component, and if so, how. 

fill定義組件是否應該被調整,以及如何。

weight定義組件應該多少額外的空間使用

UPDATE:

添加任何JComponent的如JPanel後所有按鈕和fillJPanelweight=1設置。你的按鈕的權重是0,所有額外的空間被添加到面板。

+0

但我不想調整按鈕大小。我只是想填補空白並逐行設置它們(從上到下所有空格應該在底部而不是按鈕之間)順便說一句,感謝您的關注。 –

+0

答案更新 – StanislavL

+0

它填充和刪除空格,但仍然調整我的按鈕的大小,以填補所有空間:(我不想調整大小。只是想要刪除我的組件之間的所有差距,並將這些差距添加到面板的末尾 –