使用 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 * x
是gap
大小(这里是3)当x为0时(当在第一列时),当x是1时是gap
x 3 .
我在使用 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 * x
是gap
大小(这里是3)当x为0时(当在第一列时),当x是1时是gap
x 3 .