关于在Java中使用GridBagLayout

时间:2013-12-23 11:57:23

标签: java swing layout layout-manager gridbaglayout

我正在学习如何使用GridBagLayout。我在JFrame中创建了两个按钮。我试着让它们中的一个占用一个柱子(默认),另外两个柱子,因此是第一个柱子的两倍(我知道我可以使用setPrefferredSize实现这个,但我的目的是学习如何使用gridwidth和gridheight)。

有什么问题?感谢

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

public class Main extends JFrame {

    Main(){

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500,500);

        JPanel panel1 = new JPanel(new GridBagLayout());
        JButton b1,b2;
        b1 = new JButton("button 1");
        b2 = new JButton("button 2");

        GridBagConstraints gbc = new GridBagConstraints();

        gbc.gridx = 1;
        gbc.gridwidth = 1;
        panel1.add(b1);
        gbc.gridx = 2;
        gbc.gridwidth = 2;
        panel1.add(b2);

        add(panel1);

        setVisible(true);

    }

    public static void main(String[]args){

        Main m = new Main();

    }

}

3 个答案:

答案 0 :(得分:2)

第二个按钮的宽度与多少列无关。

实际上两个按钮都会被要求提供他们喜欢的宽度,如果它们有足够的空间,宽度将被设置为它们。

如果空间较小,则使用最小宽度。

如果有额外的空间,它会根据重量比例在控件之间分配。

你可以尝试设置第一个iPadX = 100,iPadx = 200,第一个设置iPadX = 1,第二个设置iPadx = 2。

答案 1 :(得分:1)

问题是GridBagLayout的所有列都没有相同的宽度。宽度是根据它们包含的组件的首选大小计算的。因此,您可以使用3,4或100作为第二个按钮的网格宽度,它不会改变任何内容。

您需要使用fillx和weightx来更改按钮调整大小的方式。

答案 2 :(得分:0)

尝试以这种方式使用GridBagConstraint,希望这对您有帮助。

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

public class Main extends JFrame {

    Main(){

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500,500);

        JPanel panel1 = new JPanel(new GridBagLayout());
        JButton b1,b2;
        b1 = new JButton("button 1");
        b2 = new JButton("button 2");

       panel1.add(b1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
       panel1.add(b2, new GridBagConstraints(1, 0, 1, 1, 2.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));

        add(panel1);

        setVisible(true);

    }

    public static void main(String[]args){

        Main m = new Main();

    }

}

修改

或更改您的代码如下所示:

gbc.gridx = 1;
gbc.gridwidth = 1;
panel1.add(b1, gbc);
gbc.gridx = 2;
gbc.gridwidth = 2;
gbc.fill = gbc.HORIZONTAL; //set fill property to HORIZONTAL
gbc.weightx= 2.0;
panel1.add(b2, gbc); //While adding button also add it with gbc