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