我想对齐一个复选框(红色突出显示的区域)根据其他相应的字段。
这是我用来生成此
的主要方法public class DialogTesting extends JFrame{
public static void main(String args[])
{
JFrame frame = new JFrame();
frame.setSize(320,250);
frame.setLocation(400,400);
JTextField txtUserName,txtHostName,txtPortNo,txtSID;
JPasswordField txtPassword;
JPanel mainPanel;
JCheckBox chkBoxSaveConnection;
mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createEmptyBorder());
mainPanel.setPreferredSize(new Dimension(300, 210));
mainPanel.setLayout(new FlowLayout());
JLabel l_label = null;
txtUserName = new JTextField("K_USERNAME", 15);
txtUserName.putClientProperty("maxlength", 200);
l_label = new JLabel("User Name");
l_label.setPreferredSize(new Dimension(100, 30));
mainPanel.add(l_label);
mainPanel.add(txtUserName);
txtPassword = new JPasswordField("K_PASSWORD", 15);
txtUserName.putClientProperty("maxlength", 200);
l_label = new JLabel("Password");
l_label.setPreferredSize(new Dimension(100, 30));
mainPanel.add(l_label);
mainPanel.add(txtPassword);
txtHostName = new JTextField("K_HOSTNAME", 15);
txtHostName.putClientProperty("maxlength", 200);
l_label = new JLabel("Host Name");
l_label.setPreferredSize(new Dimension(100, 30));
mainPanel.add(l_label);
mainPanel.add(txtHostName);
txtPortNo = new JTextField("K_PORTNO", 15);
l_label = new JLabel("Port Number");
l_label.setPreferredSize(new Dimension(100, 30));
txtPortNo.putClientProperty("maxlength", 200);
mainPanel.add(l_label);
mainPanel.add(txtPortNo);
txtSID = new JTextField("K_SID", 15);
l_label = new JLabel("SID number");
l_label.setPreferredSize(new Dimension(100, 30));
txtPortNo.putClientProperty("maxlength", 200);
mainPanel.add(l_label);
mainPanel.add(txtSID);
chkBoxSaveConnection = new JCheckBox();
l_label = new JLabel("chkBoxSaveConnection");
l_label.setPreferredSize(new Dimension(150, 30));
mainPanel.add(l_label);
mainPanel.add(chkBoxSaveConnection);
mainPanel.setVisible(true);
frame.add(mainPanel);
frame.setVisible(true);
}
}
这里我想根据其他字段使复选框(红色突出显示区域)对齐
我尝试了这个解决方案,使其正确对齐
mainPanel.setLayout(new GridLayout());
GridBagConstraints l_bag_constraints = new GridBagConstraints();
l_bag_constraints.fill = GridBagConstraints.HORIZONTAL;
mainPanel.add(jlabel,FieldMapperHelper.getGridBagCompPosition(l_bag_constraints,0,0,10,1,0,10)
);
mainPanel.add(txtUserName
,FieldMapperHelper.getGridBagCompPosition(l_bag_constraints,0,1,10,1,0,10)
);
但在这种情况下,它显示的是非常小的文本框。
如果你想要别的东西,请告诉我。
答案 0 :(得分:2)
好的,所以你的问题是你没有使用合适的LayoutManager而你也被迫设置首选尺寸(你应该永远不会这样做)。
以下是使用GridBagLayout
的代码的更新版本,应该可以正常运行:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class DialogTesting {
protected void initUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField txtUserName, txtHostName, txtPortNo, txtSID;
JPasswordField txtPassword;
JPanel mainPanel;
JCheckBox chkBoxSaveConnection;
GridBagConstraints firstCol = new GridBagConstraints();
firstCol.weightx = 1.0;
firstCol.anchor = GridBagConstraints.WEST;
firstCol.insets = new Insets(5, 20, 5, 5);
GridBagConstraints lastCol = new GridBagConstraints();
lastCol.gridwidth = GridBagConstraints.REMAINDER;
lastCol.weightx = 1.0;
lastCol.fill = GridBagConstraints.HORIZONTAL;
lastCol.insets = new Insets(5, 5, 5, 20);
mainPanel = new JPanel(new GridBagLayout());
JLabel l_label = null;
txtUserName = new JTextField("K_USERNAME", 15);
txtUserName.putClientProperty("maxlength", 200);
l_label = new JLabel("User Name");
mainPanel.add(l_label, firstCol);
mainPanel.add(txtUserName, lastCol);
txtPassword = new JPasswordField("K_PASSWORD", 15);
txtUserName.putClientProperty("maxlength", 200);
l_label = new JLabel("Password");
mainPanel.add(l_label, firstCol);
mainPanel.add(txtPassword, lastCol);
txtHostName = new JTextField("K_HOSTNAME", 15);
txtHostName.putClientProperty("maxlength", 200);
l_label = new JLabel("Host Name");
mainPanel.add(l_label, firstCol);
mainPanel.add(txtHostName, lastCol);
txtPortNo = new JTextField("K_PORTNO", 15);
l_label = new JLabel("Port Number");
txtPortNo.putClientProperty("maxlength", 200);
mainPanel.add(l_label, firstCol);
mainPanel.add(txtPortNo, lastCol);
txtSID = new JTextField("K_SID", 15);
l_label = new JLabel("SID number");
txtPortNo.putClientProperty("maxlength", 200);
mainPanel.add(l_label, firstCol);
mainPanel.add(txtSID, lastCol);
chkBoxSaveConnection = new JCheckBox();
l_label = new JLabel("chkBoxSaveConnection");
mainPanel.add(l_label, firstCol);
mainPanel.add(chkBoxSaveConnection, lastCol);
frame.add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new DialogTesting().initUI();
}
});
}
}