2013-02-11 34 views
2

這是從netbeans Swing gui設計器生成的一段代碼。 我試圖做到以下幾點:jLabel1jLabel2將只包含尺寸爲52x46像素,沒有文字的圖像圖標,它們應該固定在行的左側和右側,jTextField2預計將填補jlabels之間的空白,並自動調整大小全屏/查看寬度。Swing GridBagLayout - 自動調整字段的大小

問題是,jTextField2仍然具有相同的寬度無論什麼窗口的大小/看法是...最初的寬度取決於場地內的硬編碼文本的長度...

你有什麼想法,如何做到這一點?

private void initComponents() { 
    javax.swing.JLabel jLabel1; 
    javax.swing.JLabel jLabel2; 
    javax.swing.JTextField jTextField2; 

    java.awt.GridBagConstraints gridBagConstraints; 

    jLabel1 = new javax.swing.JLabel(); 
    jTextField2 = new javax.swing.JTextField(); 
    jLabel2 = new javax.swing.JLabel(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    getContentPane().setLayout(new java.awt.GridBagLayout()); 

    jLabel1.setText("ABC"); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START; 
    getContentPane().add(jLabel1, gridBagConstraints); 

    jTextField2.setText("some text field content"); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE; 
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 
    getContentPane().add(jTextField2, gridBagConstraints); 

    jLabel2.setText("ABC"); 
    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 
    gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END; 
    getContentPane().add(jLabel2, gridBagConstraints); 

    pack(); 
} 

回答

8

See documentation of GridBagLayout

GridBagConstraints.weightxGridBagConstraints.weighty

用於確定如何分配空間,這對於指定調整行爲很重要。除非您至少在連續(重量x)和列(重量)中指定一個組件的重量,否則所有組件都會聚集在其容器的中心。這是 ,因爲當權重爲零(默認值)時,GridBagLayout對象在其單元格網格和容器邊緣之間放置任何額外空間。

jTextField2.setText("some text field content"); 
gridBagConstraints = new java.awt.GridBagConstraints(); 
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.RELATIVE; 
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 

gridBagConstraints.weightx = 1.0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

getContentPane().add(jTextField2, gridBagConstraints);