有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing在Java中使用GridBagLayout

我正在学习如何使用GridBagLayout。我在JFrame中创建了两个按钮。我试着让其中一个占用一个collumn(默认值),另外两个collumn,因此大小是第一个的两倍(我知道我可以使用setPreferredSize实现这一点,但我的目的是学习如何使用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) 个答案

  1. # 1 楼答案

    尝试以这种方式使用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
    
  2. # 2 楼答案

    问题是GridBagLayout的所有列的宽度都不相同。宽度根据其包含的组件的首选尺寸计算。因此,可以使用3、4或100作为第二个按钮的网格宽度,它不会改变任何东西

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

  3. # 3 楼答案

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

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

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

    如果有额外的空间,它将根据权重比例分布在控件之间

    您可以尝试将第一个设置为iPadX=100,将iPadX=200,并将第一个设置为比例iPadX=1,将第二个设置为比例iPadX=2