Java:GridBagLayout和GridBagConstraints

Java:GridBagLayout和GridBagConstraints,java,oracle,Java,Oracle,我很难理解网格约束是如何工作的。是否所有东西都处于“列和行”类型的状态,或者是否可以使用精确的像素规格(x:10Y:20->在角落中)。基本上,我只是想知道这是如何工作的,以及我所说的是否正确。多谢各位 某些代码:/:(错误代码) 我相信您使用的GridBagLayout和约束部分(grid)确实是基于程序左上角的行(x)和列(y)。尽管在布局中使用gridheight和gridwidth的方式略有不同,但也有其他方法可以做到这一点 了解更多语法:) 你看过吗?它确实有助于简化awt/swing

我很难理解网格约束是如何工作的。是否所有东西都处于“列和行”类型的状态,或者是否可以使用精确的像素规格(x:10Y:20->在角落中)。基本上,我只是想知道这是如何工作的,以及我所说的是否正确。多谢各位

某些代码:/:(错误代码)


我相信您使用的GridBagLayout和约束部分(grid)确实是基于程序左上角的行(x)和列(y)。尽管在布局中使用gridheight和gridwidth的方式略有不同,但也有其他方法可以做到这一点

了解更多语法:)


你看过吗?它确实有助于简化awt/swing组件的布局。
GridBagLayout
本质上类似于行和列的表格,其中
gridx/y
约束指定了单元格。可以在单元中定义零部件的约束。如果某个单元格的
weightx/y
属性为cell,则该单元格将影响列/行中的所有其他单元格,也就是说,如果使单个单元格填充可用宽度,则该列中的所有单元格也将具有相同的宽度。这是一个高度灵活的
GridLayout
。不,您无法获得像素完美的控制,但您可以使用一些技巧为单个单元中的组件提供一些缓冲
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.*;

public class Main{
    public static void main(String[] args){

        //Declaring JFrame, JPanel, JButton
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        GridBagConstraints gbc = new GridBagConstraints();
        JButton button = new JButton("Click me");

        //JFrame, frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);

        //JPanel, panel
        panel.setLayout(new GridBagLayout());
        frame.add(panel);

        //JButton, button
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.insets = new Insets(1, 1, 1, 1);
        panel.add(button, gbc);
        frame.setVisible(true);
    }
}