2012-01-05 72 views
2

我想創建一個佈局:2行,1列。第一排佔窗戶高度的70%,第二排佔窗戶的30%。我通過使用GridBagConstraintsweighty屬性來實現此目的。一列布局不使用窗口的全角

但是,我的組件的寬度有問題,因爲當我調整應用程序窗口大小時,組件的寬度保持不變,並且在組件的左側和右側得到一個空白區域(即使我設置爲fillBOTH)。當我改變窗口的高度時,不會發生這個問題(組件調整得非常好,並填充窗口的整個高度)。

下面我約束:

firstConstraints.gridx = 0; 
firstConstraints.gridy = 0; 
firstConstraints.weighty = 0.7; 
firstConstraints.fill = GridBagConstraints.BOTH; 

secondConstraints.gridx = 0; 
secondConstraints.gridy = 1; 
secondConstraints.weighty = 0.3; 
secondConstraints.fill = GridBagConstraints.BOTH; 
+0

您是否嘗試過建立和錨約束? – 2012-01-05 16:42:34

回答

5

我覺得你還需要:

gbc.weightx = 1.0; 

請參見從How to Use a GrigBagLayout Swing的教程,談到了的weightx,沉重的約束secton。

+1

這很好,非常感謝。我認爲權重有一些正確的默認值,但這是一個錯誤的假設。 – 2012-01-05 19:25:53

1

簡單的例子

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class BorderPanels extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public BorderPanels() { 
     getContentPane().setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     JPanel panel1 = new JPanel(); 
     Border eBorder = BorderFactory.createEtchedBorder(); 
     panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "70pct")); 
     gbc.gridx = gbc.gridy = 0; 
     gbc.gridwidth = gbc.gridheight = 1; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.anchor = GridBagConstraints.NORTHWEST; 
     gbc.weightx = gbc.weighty = 70; 
     getContentPane().add(panel1, gbc); 
     JPanel panel2 = new JPanel(); 
     panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "30pct")); 
     gbc.gridy = 1; 
     gbc.weightx = 30; 
     gbc.weighty = 30; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     getContentPane().add(panel2, gbc); 
     pack(); 
    } 

    public static void main(String[] args) { 
     new BorderPanels().setVisible(true); 
    } 
} 
+0

很好的答案,但我認爲@camickr已經確定了確切的問題...... – 2012-01-05 17:48:58