【问题标题】:Component Spacing Using GridLayout使用 GridLayout 的组件间距
【发布时间】:2022-01-20 09:38:43
【问题描述】:

我在使用 Java GridLayout 时遇到问题。首先,我使用网格布局简单地将两个 JLabel 组件及其对应的 JTextField 控件放在一起,但我发现的问题是标签和 textField 之间的空间太大,我不知道如何纠正它。

    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 之间的间距的捕获:

【问题讨论】:

    标签: java swing layout-manager grid-layout


    【解决方案1】:

    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时(在第一列),gapx 3,当x为1时。

    【讨论】:

    • 我已经尝试过了,一切正常。除此之外,感谢您的代码和精彩的解释,我也理解了它。非常感谢!!!
    • @Juanan:不客气。请注意,尽管我在这里的 GridBagConstraints 示例有点简单,因为在给定情况下可能需要设置其他几个属性,包括 weightx、weighty 等。如果您需要,有关于该主题的很好的教程更多使用这种布局,你应该看看。
    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2023-04-10
    • 2020-04-28
    • 2017-02-08
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多