我想要一个网格布局,每一行都有一个文本字段来输入值。 在每个文本字段附近,我添加了一个空标签。 试图更改行数和列数以匹配我实际添加的内容
pnlTop=new JPanel(new GridLayout(0,2));
// Username
lblUserName = new JLabel("Username:");
txtUserName = new JTextField(10);
// Password
lblPassword = new JLabel("Password:");
txtPassword = new JPasswordField(5);
// Retype Password
lblRetype = new JLabel("Repeat Password:");
txtRetype = new JPasswordField(5);
// ID
lblID = new JLabel("ID:");
txtID = new JTextField(5);
// Permission
lblPermission = new JLabel("Permission");
txtPermission = new JTextField(5);
//Empty Labels
lblX1 = new JLabel("");
lblX2 = new JLabel("");
lblX3 = new JLabel("");
lblX4 = new JLabel("");
// Top Panel - adding elements
pnlTop.add(lblUserName);
pnlTop.add(lblX1);
pnlTop.add(txtUserName);
pnlTop.add(lblPassword);
pnlTop.add(lblX2);
pnlTop.add(txtPassword);
pnlTop.add(lblRetype);
pnlTop.add(lblX2);
pnlTop.add(txtRetype);
pnlTop.add(lblID);
pnlTop.add(lblX3);
pnlTop.add(txtID);
pnlTop.add(lblPermission);
pnlTop.add(lblX4);
pnlTop.add(txtPermission);
// Bottom Panel -- Adding buttons
pnlBottom = new JPanel(new FlowLayout());
btnCancel = new JButton("Cancel");
btnSignUp = new JButton("Sign UP");
pnlBottom.add(btnCancel);
btnCancel.addActionListener(this);
pnlBottom.add(btnSignUp);
btnSignUp.addActionListener(this);
// adding focus listeners
txtID.addFocusListener(this);
txtPassword.addFocusListener(this);
txtUserName.addFocusListener(this);
txtRetype.addFocusListener(this);
// General Panel - adding top and bottom panels
pnlGeneral = new JPanel(new BorderLayout());
pnlGeneral.add(pnlTop,BorderLayout.NORTH);
pnlGeneral.add(pnlBottom,BorderLayout.SOUTH);
// Setting size and location of screen
setContentPane(pnlGeneral);
setLocation(600, 400);
setVisible(true);
pack();
这是完整的代码,位于不同的类中。 现在,我将lblX1添加到pnlTop中,网格破裂。
我试图更改行数/列数,但没有成功,我非常感谢提供任何帮助。
3列当前情况的图像:
基本上我希望它看起来像这样
| Username: | _____ | |
| Password: | _____ | |
| Repeat Password: | _____ | |
| ID: | _____ | |
| Permission | _____ | |
在右侧的每个文本字段附近,将根据我的任何条件(已经具有功能,但与该问题无关)添加一个红色的X(这就是为什么我留出空白)
答案 0 :(得分:1)
这里:
pnlTop=new JPanel(new GridLayout(0,2));
这将为两个列创建一个“网格”。
但是您继续添加:
// Top Panel - adding elements
pnlTop.add(lblUserName);
pnlTop.add(lblX1);
pnlTop.add(txtUserName);
三列。我将从以下内容开始:
// Top Panel - adding elements
pnlTop.add(lblUserName);
pnlTop.add(txtUserName);
我假设您打算使用这些lblX...
来控制水平“间隙”。但是,如果这样做,则必须使用 3 列网格!
但是真正的答案是研究网格布局的可能性,因为这应该允许您以不同的方式控制列宽。就像玩hgap
和vgap
设置一样(有关一些想法,请参见“官方” documentation)。
含义:使用2列网格(如您现在所做的那样),并且每行仅添加两个元素,并通过网格布局的相应控制机制控制“间隙”。 / p>
最终更新:
pnlTop.add(lblX2);
该人出现两次。问题是:您希望有 5 行,每行分别具有 3 列。因此,您的网格布局需要说:3列。并且:您应该添加15个不同 UI元素,然后(3 x 5)。您有14,并且要添加第二个“分隔符”两次。