4

我在我的表单上使用 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很大,我的按钮大小不一样) 在此处输入图像描述

4

2 回答 2

1

我建议您使用 Netbeans 拖放工具,它允许您物理设置组件并为您提供预览。如果你想用代码来做,只需使用自由布局并手动设置每个组件的位置和大小通过 setSize() 和 setLocation() 方法,虽然这需要更多的代码行,但会确保你所有的组件都是在他们正确的位置。

于 2013-08-03T22:55:37.093 回答
1

如果您不关心布局管理器,而只关心布局,那么您应该使用 a GridLayout,或者如果您不希望所有组件的大小相同,则使用 a 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复杂性可能是值得的。

于 2013-08-06T08:11:28.270 回答