如何将Jpanels扩展为GridBagLayout

时间:2016-10-19 10:20:25

标签: java jpanel size gridbaglayout

我的问题是如何将我的3个JPanel扩展到我的GrigBadLayout中。 我添加了2张照片,第一张样本并显示结果,第二张是我想要的。

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JPanel;


public class ListMembersView extends JPanel{
    JPanel headerPanel;
    JPanel containerPanel;
    JPanel footerPanel;

    public ListMembersView(){

        initComponents();
        initLayout();
    }

private void initComponents(){

    this.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255),5));

    headerPanel = new JPanel();
    headerPanel.setBackground(Color.red);
    containerPanel = new JPanel();
    containerPanel.setBackground(Color.yellow);
    footerPanel = new JPanel();
    footerPanel.setBackground(Color.blue);
}    

private void initLayout(){    
    this.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    /*Not expand JPanel?*/
    c.fill = GridBagConstraints.HORIZONTAL;

    c.gridx=0; c.gridy=0; 
    this.add(headerPanel,c);

    c.gridx=0; c.gridy=1; 
    c.gridwidth = 3;
    this.add(containerPanel,c);

    c.gridx=0; c.gridy=2; 
    this.add(footerPanel,c);

}
}

我的结果是:

enter image description here

我想那样:

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要将rowWeights = {1, 1,1}fill以及import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JPanel; public class ListMembersView extends JPanel{ JPanel headerPanel; JPanel containerPanel; JPanel footerPanel; public ListMembersView(){ initComponents(); initLayout(); } private void initComponents(){ this.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255),5)); headerPanel = new JPanel(); headerPanel.setBackground(Color.red); containerPanel = new JPanel(); containerPanel.setBackground(Color.yellow); footerPanel = new JPanel(); footerPanel.setBackground(Color.blue); } private void initLayout(){ GridBagLayout gridBagLayout = new GridBagLayout(); this.setLayout(gridBagLayout); gridBagLayout.columnWeights = new double[] {1}; gridBagLayout.rowWeights = new double[] {1, 1, 1}; GridBagConstraints c = new GridBagConstraints(); /*Not expand JPanel?*/ c.fill = GridBagConstraints.BOTH; c.gridx=0; c.gridy=0; this.add(headerPanel,c); c.gridx=0; c.gridy=1; c.gridwidth = 3; this.add(containerPanel,c); c.gridx=0; c.gridy=2; this.add(footerPanel,c); } public static void main(String[] args) { JFrame frame = new JFrame("test"); frame.setLayout(new BorderLayout()); frame.add(new ListMembersView()); frame.setSize(500, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } 设置为:

fill=BOTH

weights teels,该面板应向两个方向延伸。

{{1}}告诉我们如何按比例划分行或列的空间与其权重的总和。