使用 GridLayout 的组件间距

Component Spacing Using GridLayout

我在使用 Java GridLayout 时遇到问题。首先,我使用网格布局简单地放置两个 JLabel 组件及其相应的 JTextField 控件,但我发现的问题是标签和标签之间的 space 太多了文本字段,我不知道如何更正它。

    JPanel panel2 = new JPanel ();
    estableceBorde(panel2, "Info Jinete y Caballo   ");
    
    GridLayout panel21;
    panel21 = new GridLayout(2,2);
    panel21.setHgap(0);
    panel21.setVgap(10);
    panel2.setLayout(panel21);
    
    panel2.add(jinete);
    panel2.add(jinetet);
    panel2.add(caballo);
    panel2.add(caballot);

这是 JLabel 和 JTextField 之间的间距捕获,我的意思是:

GridLayout 的问题是所有网格框的大小必须完全相同,如果这是您想要的布局,例如当您想要创建棋盘时,这很好,但如果不是你需要一个更灵活的网格。我自己会使用不同的布局,例如 GridBagLayout,它可以为您的定位和间隙提供更大的灵活性。例如:

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

public class Foo001 {
    public static void main(String[] args) {
        JPanel panel2 = new JPanel (new GridBagLayout());
        
        GridBagConstraints gbc = createGbc(0, 0);
        
        panel2.add(new JLabel("Jinete"), createGbc(0, 0));
        panel2.add(new JTextField(15), createGbc(1, 0));
        panel2.add(new JLabel("Caballo"), createGbc(0, 1));
        panel2.add(new JTextField(15), createGbc(1, 1));
        
        panel2.setBorder(BorderFactory.createTitledBorder("Info Jinete y Caballo"));

        // Show the JPanel for demonstration purposes
        JOptionPane.showMessageDialog(null, panel2);
        
    }

    private static GridBagConstraints createGbc(int x, int y) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        int gap = 3;
        gbc.insets = new Insets(gap, gap + 2 * gap * x, gap, gap);
        return gbc;
    }
}

这段代码的关键,也是使用 GridBagLayout 的难点,是正确设置 GridBagConstraints,这是我经常使用实用方法做的事情,这里 createGbc(...)。 gridx 和 gridy 设置很明显,因为这是组件相对于彼此放置的位置。插图是组件周围的间隙,我给了 JTextFields 一个更大的左插图,以便将它们与相应的 JLabels 分开一点:`

new Insets(gap, gap + 2 * gap * x, gap, gap);

左边的pad,gap + 2 * gap * xgap大小(这里是3)当x为0时(当在第一列时),当x是1时是gap x 3 .