java - SpringLayout 中的组件大小

标签 java swing preferredsize springlayout

我在表单上使用了 SpringLayout,但是如您所见,它的外观并不好(大而且尺寸不佳)!

public class t8 extends JFrame {

JButton okButton, cancellButton;
JTextField idTF, nameTf;
JLabel idlbl, namelbl;

public t8() {
    add(createPanel(), BorderLayout.CENTER);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 500);
    setLocation(400, 100);
    setVisible(true);
}

public static void main(String[] args) {
    new t8();
}

public JPanel createPanel() {
    JPanel panel = new JPanel();
    okButton = new JButton("Ok");
    cancellButton = new JButton("Cancel");
    idTF = new JTextField(10);
    nameTf = new JTextField(10);
    idlbl = new JLabel("ID");
    namelbl = new JLabel("Name");
    panel.add(idlbl);
    panel.add(idTF);
    panel.add(namelbl);
    panel.add(nameTf);
    panel.add(okButton);
    panel.add(cancellButton);

    panel.setLayout(new SpringLayout());
    SpringUtilities.makeCompactGrid(panel, 3, 2, 20, 50, 50, 100);
    return panel;
}
}

我更改了makeCompactGrid 数字,但没有成功!

(JTextFields的宽度很大,我的按钮大小不一样) enter image description here

最佳答案

如果您不关心布局管理器,而只关心布局,那么您应该使用 GridLayout,或者如果您不希望所有组件大小相同,一个 GridBagLayout。以下是使用网格布局的方法(仅显示修改后的方法):

public JPanel createPanel() {
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout());
    okButton = new JButton("Ok");
    cancellButton = new JButton("Cancel");
    idTF = new JTextField(10);
    nameTf = new JTextField(10);
    idlbl = new JLabel("ID");
    namelbl = new JLabel("Name");
    panel.add(idlbl);
    panel.add(idTF);
    panel.add(namelbl);
    panel.add(nameTf);
    panel.add(okButton);
    panel.add(cancellButton);
    return panel;
}

还有一个 GridBagLayout:

public JPanel createPanel() {
    JPanel panel = new JPanel();
    GridBagLayout gb = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    panel.setLayout(gb);
    okButton = new JButton("Ok");
    cancellButton = new JButton("Cancel");
    idTF = new JTextField(10);
    nameTf = new JTextField(10);
    idlbl = new JLabel("ID");
    namelbl = new JLabel("Name");
    add(panel, idlbl, 0, 0, 1, 1, gb, gbc, false);
    add(panel, idTF, 0, 1, 1, 1, gb, gbc, true);
    add(panel, namelbl, 1, 0, 1, 1, gb, gbc, false);
    add(panel, nameTf, 1, 1, 1, 1, gb, gbc, true);
    add(panel, okButton, 2, 0, 1, 1, gb, gbc, false);
    add(panel, cancellButton, 2, 1, 1, 1, gb, gbc, true);
    return panel;
}

private void add(Container outer, Component c, int x, int y, int w, int h, GridBagLayout gb, GridBagConstraints gbc, boolean wide) {
    gbc.gridx = x;
    gbc.gridy = y;
    gbc.gridwidth = w;
    gbc.gridheight = h;
    if (wide) {
        gbc.weightx = 100;
    } else {
        gbc.weightx = 0;
    }
    gb.setConstraints(c, gbc);
    outer.add(c);
}

我相信额外的 GridBagLayout 复杂性可能是值得的。

关于java - SpringLayout 中的组件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037955/

相关文章:

java - IntelliJ IDEA 14步反编译代码?

Java FragmentTransaction 类

SplitPane 中的 Java Swing 复选框

java - 设置可见时无法更改 JFrame 尺寸

java - 按百分比设置JTable的列宽

java - Firebase简单聊天客户端无法检索值

java - 线程更新调度程序线程上的 GUI 导致异常

java - 将一组文本按钮添加到网格布局

java - JFrame 周围的 LineBorder 消失

java - 为什么在访问Child.name 时不执行Child 类的静态 block ?