Java中的网格布局策略

Java中的网格布局策略,java,user-interface,gridbaglayout,Java,User Interface,Gridbaglayout,我正在努力在GridBagLayout中的两个组件之间放置垂直空间,希望得到帮助 (1)成功地在前两个组件和 (2)更好地理解基于下图的组件布局策略 下面是(a)我拥有的,(b)我想要的,(c)我在另一个选项卡中制作的,以及(d)我遇到问题的选项卡的代码 我有这个,你可以看到这两行之间没有空格。我无法使插图正常工作 我想要这个 我能够做到这一点,但我认为我做得效率低下。 这是我的中文剩余Thm标签的代码: import java.awt.*; import javax.swing.*;

我正在努力在GridBagLayout中的两个组件之间放置垂直空间,希望得到帮助

(1)成功地在前两个组件和

(2)更好地理解基于下图的组件布局策略

下面是(a)我拥有的,(b)我想要的,(c)我在另一个选项卡中制作的,以及(d)我遇到问题的选项卡的代码

我有这个,你可以看到这两行之间没有空格。我无法使插图正常工作

我想要这个

我能够做到这一点,但我认为我做得效率低下。

这是我的中文剩余Thm标签的代码:

import java.awt.*;
import javax.swing.*;


public class CRTTab extends JPanel{

// for stackoverflow
public static void main(String[] args){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocation(200, 50);
    frame.setPreferredSize(new Dimension(600, 674));
    frame.add(new CRTTab());
    frame.pack(); //fit gui components nicely
    frame.setVisible(true);
}

/** Global Variables */

//entry labels & corresponding text field
// α ≡ i (mod m)
JLabel alphaLabel1; // α ≡
JFormattedTextField iEnter; // ENTER i
JLabel leftPar1; // (mod
JFormattedTextField mEnter; // ENTER m
JLabel rightPar1; // )

// α ≡ j (mod n)
JLabel alphaLabel2; // α ≡
JFormattedTextField jEnter; // ENTER j
JLabel leftPar2; // (mod
JFormattedTextField nEnter; // ENTER n
JLabel rightPar2; // )


//Solve/Import buttons & answer label
JButton solveButton; 
JButton importButton;
JTextPane crtAnswer; // α ≡ _ (mod m*n)


//table (showing GCD computation) maintenance
JTable t;
JScrollPane scroller;


/**Construct CRT Tab
 */
CRTTab() {
    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    // α ≡ i (mod m) in ROW 1 *****************************************************************

    //α ≡ label
    alphaLabel1 = new JLabel("α ≡", JLabel.CENTER);
    alphaLabel1.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.fill = GridBagConstraints.BOTH;
    c.anchor = GridBagConstraints.BASELINE;
    c.weightx = 0.01;
    c.weighty = 1;
    c.gridx = 0;
    c.gridy = 0;
    c.insets = new Insets(0, 40 , 0, 0); //top, left, bottom, right
    add(alphaLabel1, c);

    //enter i
    iEnter = new JFormattedTextField();
    iEnter.setFont(new Font("Arial", Font.PLAIN, 22));
    alphaLabel1.setLabelFor(iEnter);

    //constraints
    c.weightx = 35.0;
    c.insets = new Insets(0, 5 , 0, 0); //top left bottom right
    c.gridx = 1;
    add(iEnter, c);

    //(mod label
    leftPar1 = new JLabel("(mod");
    leftPar1.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.weightx = 0.01;
    c.gridx = 2;
    c.insets = new Insets(0, 10, 0, 0); //top, left, bottom, right
    add(leftPar1, c);

    //enter m
    mEnter = new JFormattedTextField();
    mEnter.setFont(new Font("Arial", Font.PLAIN, 22));
    leftPar1.setLabelFor(mEnter);

    //constraints
    c.weightx = 35.0;
    c.insets = new Insets(0, 10 , 0, 0); //top, left, bottom, right
    c.gridx = 3;
    add(mEnter, c);

    //) label
    rightPar1 = new JLabel(")");
    rightPar1.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.weightx = 0.01;
    c.fill = GridBagConstraints.REMAINDER;
    c.gridx = 4;
    c.insets = new Insets(0, 5, 0, 40); //top, left, bottom, right
    add(rightPar1, c);


    // ROW 2 ******************************************************************************************0

    //α ≡ label
    alphaLabel2 = new JLabel("α ≡", JLabel.CENTER);
    alphaLabel2.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.weighty = 3;
    c.gridx = 0;
    c.anchor = GridBagConstraints.BELOW_BASELINE;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.insets = new Insets(0, 40 , 0, 0); //top, left, bottom, right
    add(alphaLabel2, c);

    //enter j
    jEnter = new JFormattedTextField();
    jEnter.setFont(new Font("Arial", Font.PLAIN, 22));
    alphaLabel2.setLabelFor(jEnter);

    //constraints
    c.weightx = 35.0;
    c.insets = new Insets(20, 5 , 0, 0); //top left bottom right
    c.gridx = 1;
    add(jEnter, c);

    //(mod label
    leftPar2 = new JLabel("(mod");
    leftPar2.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.weightx = 0.01;
    c.gridx = 2;
    c.insets = new Insets(0, 10, 0, 0); //top, left, bottom, right
    add(leftPar2, c);

    //enter m
    nEnter = new JFormattedTextField();
    nEnter.setFont(new Font("Arial", Font.PLAIN, 22));
    leftPar2.setLabelFor(nEnter);

    //constraints
    c.weightx = 35.0;
    c.insets = new Insets(20, 10 , 0, 0); //top, left, bottom, right
    c.gridx = 3;
    add(nEnter, c);

    //) label
    rightPar2 = new JLabel(")");
    rightPar2.setFont(new Font("Arial", Font.PLAIN, 22));

    //constraints
    c.weightx = 0.01;
    c.fill = GridBagConstraints.REMAINDER;
    c.gridx = 4;
    c.insets = new Insets(0, 5, 0, 40); //top, left, bottom, right
    add(rightPar2, c);




}//end constructor

}

如果更改插图中的顶部/底部值是否有效?我可以使输入数字的JFormattedTextField框比其上/下的框占用更多空间,但它看起来仍然像一个框被一分为二,中间没有空间。我希望中间有空格,因为你可以为文本字段设置一个单独的布局,这样它们更容易使用。看起来DizzyCode的答案是正确的,我也有同样的问题,但我确信有更好的方法来实现它。@AntonioAguilar对我有效的是使用BoxLayout扩展JPanel的主选项卡,然后在每个组件的主JPanel中都有JPanel。*panel1()-输入第一个一致性(默认布局)*panel2()-输入第二个一致性(默认布局)*panel3()-“求解系统”和“显示GCD”按钮(BoxLayout)*panel4()-答案的空白条(GridBagLayout)…依此类推。见: