Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring布局中组件之间的空间过大_Java_Swing_Layout Manager_Springlayout - Fatal编程技术网

Java Spring布局中组件之间的空间过大

Java Spring布局中组件之间的空间过大,java,swing,layout-manager,springlayout,Java,Swing,Layout Manager,Springlayout,我想手工创建一个JFrame,并使用spring布局来实现这一点。但是,我的最终输出不好。我的行和单选按钮之间的空间太大了: 我的代码: public final class NewUserFrame1 extends JFrame { public NewUserFrame1() { add(rowComponent(), BorderLayout.CENTER); setLocation(200, 40); setDefaultCloseOperation(JFr

我想手工创建一个JFrame,并使用spring布局来实现这一点。但是,我的最终输出不好。我的行和单选按钮之间的空间太大了:

我的代码:

public final class NewUserFrame1 extends JFrame {

public NewUserFrame1() {
    add(rowComponent(), BorderLayout.CENTER);
    setLocation(200, 40);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
    pack();
}

public JPanel rowComponent() {

    JPanel panel = new JPanel();
    JLabel fnamelbl = new JLabel("First name");
    JLabel lnamelbl = new JLabel("Last Name");
    JLabel fntemp = new JLabel();
    JLabel lntemp = new JLabel();
    JTextField fntf = new JTextField(10);
    JTextField lntf = new JTextField(10);
    JLabel gndlnl = new JLabel("Gender");
    JRadioButton malerb = new JRadioButton("Male");
    JRadioButton femalerb = new JRadioButton("Female");
    ButtonGroup bgroup = new ButtonGroup();
    bgroup.add(malerb);
    bgroup.add(femalerb);
    JLabel registnm = new JLabel("Registration ID is:");
    JLabel showreglbl = new JLabel();
    JLabel regtemp = new JLabel();

    panel.add(fnamelbl);
    panel.add(fntf);
    panel.add(fntemp);
    panel.add(lnamelbl);
    panel.add(lntf);
    panel.add(lntemp);
    panel.add(gndlnl);
    panel.add(malerb);
    panel.add(femalerb);
    panel.add(registnm);
    panel.add(showreglbl);
    panel.add(regtemp);

    panel.setLayout(new SpringLayout());
    SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 4);
    return panel;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            NewUserFrame1 newUserFrame1 = new NewUserFrame1();
        }
    });
}
}
现在:

  • 您的代码不可编译(缺少导入)
  • 你写道:

    makeCompactGrid(面板,4,3,50,15,3100)

  • 最后一个参数是yPad。将此值更改为10(如果需要,可以更低),例如:

    SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 10);
    
    但仍然-标签将是高等,但这是一个不同的问题。继续使用面板的大小和组件的大小

    如果是单选按钮-更改

    panel.add(malerb);
    panel.add(femalerb);
    
    例如:

    JPanel radioPanel = new JPanel();
    radioPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
    radioPanel.add(malerb);
    radioPanel.add(femalerb);
    panel.add(radioPanel);
    panel.add(new JLabel());
    

    最后一行是必需的,因为您声明布局有3列。

    而不是在
    NewUserFrame1
    构造函数中调用
    setSize
    call
    pack
    on
    JFrame

    public NewUserFrame1() {
        add(rowComponent(), BorderLayout.CENTER);
        setLocation(200, 40);
        //setSize(800, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setVisible(true);
        pack();
    }
    
    还可以通过以下方式更改
    SpringUtilities.makeCompactGrid
    方法的参数:

    SpringUtilities.makeCompactGrid(panel, 4, 3, 50, 15, 3, 4);//change yPad to 4 instead of 100. It sets the vertical height between two rows
    

    @垃圾神我应该在哪里使用pack方法?在封闭的
    窗口上
    。您的java版本是什么?使用pack方法后,我的问题解决了,但是我的主窗口太小了好的..如果你想增加宽度和高度,你应该增加
    xPad
    yPad
    一点..并用新的值继续测试,直到你得到你想要的大小。一个问题:什么时候应该使用pack方法而不是setSize方法?如果你想增加你的窗口的宽度
    textfields
    调用
    JTextField
    的构造函数时,将其称为
    新的JTextField(30)
    (或多个整数值)一个问题:什么时候应该使用pack方法而不是setSize方法?