我必须创建一个表单,其中包含用户名,密码和其他内容的输入值。这是一个指向图像的链接http://img196.imageshack.us/img196/1727/empdesign.png
我希望所有这些属性都分配到屏幕边缘,而不是居中。我尝试使用方法JComponenet.setHorizontalAlignment(SwingConstants.LEFT),但这也没有做任何事情。我在JLabels和JPanels上尝试过这种方法,但都没有效果。
这是我的代码:
public class tada extends GUIDesign{
//making all the jlabels to be placed
JLabel usernameLabel = new JLabel("username");
JLabel passwordLabel = new JLabel("Name");
JLabel empIDLabel = new JLabel("empID");
JLabel SalaryLabel = new JLabel("Salary");
JLabel EmployerLabel = new JLabel(" Salary");
JLabel hoursLabel = new JLabel("Gender");
JLabel departmentLabel = new JLabel("Department");
//making all the textfields, combo boxes, and etc.
JTextField usernameField = new JTextField(20);
JTextField passwordField = new JTextField(20);
JTextField empIDField = new JTextField(20);
JTextField SalaryField = new JTextField(20);
JTextField EmployerField = new JTextField(20);
String[] hourss = {"Fall", "Spring", "Summer"};
JComboBox hoursBox = new JComboBox(hourss);
JCheckBox[] departmentCheckBoxesBoxs = {new JCheckBox("Department 1"),
new JCheckBox("Department 2"),
new JCheckBox("Department 3"),
new JCheckBox("Department 4"),
new JCheckBox("Department 5")};
String[] Salary = {"section", "combo", "box"};
JComboBox sectionBox = new JComboBox(Salary);
//making all the panels to be placed inside the main panel.
JPanel usernamePanel = new JPanel();
JPanel passwordPanel = new JPanel();
JPanel empIDPanel = new JPanel();
JPanel SalaryPanel = new JPanel();
JPanel EmployerPanel = new JPanel();
JPanel hoursPanel = new JPanel();
JPanel departmentsPanel = new JPanel();
JPanel top, bottom;
JButton submitButton = new JButton("Submit");
public tada(){
//这会从超类初始化面板。没有什么真正重要的继承自超类。 超级(“雇主设计”,10);
setPreferredSize(new Dimension(400,600));
//将所有标签,文本字段等添加到子面板,并将子面板添加到主面板底部。 setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS)); top = new JPanel(); top.setSize(getWidth(),30); bottom = new JPanel(); bottom.setLayout(new BoxLayout(bottom,BoxLayout.Y_AXIS));
top.setBackground(Color.red);
title.setFont(new Font("Helvetica", 1,20));
top.add(title);
bottom.setBackground(Color.yellow);
usernamePanel.add(usernameLabel);
usernamePanel.add(usernameField);
bottom.add(usernamePanel);
passwordPanel.add(passwordLabel);
passwordPanel.add(passwordField);
bottom.add(passwordPanel);
empIDPanel.add(empIDLabel);
empIDPanel.add(empIDField);
bottom.add(empIDPanel);
SalaryPanel.add(SalaryLabel);
SalaryPanel.add(SalaryField);
bottom.add(SalaryPanel);
EmployerPanel.add(EmployerLabel);
EmployerPanel.add(EmployerField);
bottom.add(EmployerPanel);
hoursPanel.add(hoursLabel);
hoursPanel.add(hoursBox);
bottom.add(hoursPanel);
departmentsPanel.add(departmentLabel);
for(JCheckBox jbc: departmentCheckBoxesBoxs)
{
departmentsPanel.add(jbc);
}
bottom.add(departmentsPanel);
add(top);
add(bottom);
}
//也,因为我正在使用boxLayout(),并且它被分配给y_axis,我认为它会自动进行y轴对齐,但事实并非如此。
答案 0 :(得分:2)
根据您的代码,我能看到的最简单的方法是简单地更改主容器布局管理器。在这里我使用了网格袋布局,因为它允许我根据需要更改每个组件的个性化需求
public class BadLayout05 {
public static void main(String[] args) {
new BadLayout05();
}
public BadLayout05() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new tada());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class tada extends JPanel {
//making all the jlabels to be placed
JLabel usernameLabel = new JLabel("username");
JLabel passwordLabel = new JLabel("Name");
JLabel empIDLabel = new JLabel("empID");
JLabel SalaryLabel = new JLabel("Salary");
JLabel EmployerLabel = new JLabel(" Salary");
JLabel hoursLabel = new JLabel("Gender");
JLabel departmentLabel = new JLabel("Department");
//making all the textfields, combo boxes, and etc.
JTextField usernameField = new JTextField(20);
JTextField passwordField = new JTextField(20);
JTextField empIDField = new JTextField(20);
JTextField SalaryField = new JTextField(20);
JTextField EmployerField = new JTextField(20);
String[] hourss = {"Fall", "Spring", "Summer"};
JComboBox hoursBox = new JComboBox(hourss);
JCheckBox[] departmentCheckBoxesBoxs = {new JCheckBox("Department 1"),
new JCheckBox("Department 2"),
new JCheckBox("Department 3"),
new JCheckBox("Department 4"),
new JCheckBox("Department 5")};
String[] Salary = {"section", "combo", "box"};
JComboBox sectionBox = new JComboBox(Salary);
//making all the panels to be placed inside the main panel.
JPanel usernamePanel = new JPanel();
JPanel passwordPanel = new JPanel();
JPanel empIDPanel = new JPanel();
JPanel SalaryPanel = new JPanel();
JPanel EmployerPanel = new JPanel();
JPanel hoursPanel = new JPanel();
JPanel departmentsPanel = new JPanel();
JPanel top = new JPanel();
JPanel bottom = new JPanel();
JButton submitButton = new JButton("Submit");
public tada() {
//this initializes the panel from superclass. nothing really important inherited from superclass. super("employer design", 10);
// This is bad idea...
// setPreferredSize(new Dimension(400, 600));
//adding all the labels, text fields, etc to the sub-panels, and adding subpanels to main pannel, bottom. setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS)); top = new JPanel(); top.setSize(getWidth(), 30); bottom = new JPanel(); bottom.setLayout(new BoxLayout(bottom,BoxLayout.Y_AXIS));
top.setBackground(Color.red);
JLabel title = new JLabel("Employer Design");
// This is a bad idea - IHMO
title.setFont(new Font("Helvetica", 1, 20));
top.add(title);
bottom.setBackground(Color.yellow);
usernamePanel.add(usernameLabel);
usernamePanel.add(usernameField);
bottom.add(usernamePanel);
passwordPanel.add(passwordLabel);
passwordPanel.add(passwordField);
bottom.add(passwordPanel);
empIDPanel.add(empIDLabel);
empIDPanel.add(empIDField);
bottom.add(empIDPanel);
SalaryPanel.add(SalaryLabel);
SalaryPanel.add(SalaryField);
bottom.add(SalaryPanel);
EmployerPanel.add(EmployerLabel);
EmployerPanel.add(EmployerField);
bottom.add(EmployerPanel);
hoursPanel.add(hoursLabel);
hoursPanel.add(hoursBox);
bottom.add(hoursPanel);
departmentsPanel.add(departmentLabel);
for (JCheckBox jbc : departmentCheckBoxesBoxs) {
departmentsPanel.add(jbc);
}
GridBagConstraints gbc = new GridBagConstraints();
setLayout(new GridBagLayout());
gbc.gridx = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(top, gbc);
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
add(usernamePanel, gbc);
add(passwordPanel, gbc);
add(empIDPanel, gbc);
add(SalaryPanel, gbc);
add(EmployerPanel, gbc);
add(hoursPanel, gbc);
add(departmentsPanel, gbc);
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(bottom, gbc);
}
}
}
更好的解决方案可能是将主要字段添加到单个面板并使用GridBagLayout
代替
public class BadLayout05 {
public static void main(String[] args) {
new BadLayout05();
}
public BadLayout05() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new tada());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class tada extends JPanel {
//making all the jlabels to be placed
JLabel usernameLabel = new JLabel("username");
JLabel passwordLabel = new JLabel("Name");
JLabel empIDLabel = new JLabel("empID");
JLabel SalaryLabel = new JLabel("Salary");
JLabel EmployerLabel = new JLabel(" Salary");
JLabel hoursLabel = new JLabel("Gender");
JLabel departmentLabel = new JLabel("Department");
//making all the textfields, combo boxes, and etc.
JTextField usernameField = new JTextField(20);
JTextField passwordField = new JTextField(20);
JTextField empIDField = new JTextField(20);
JTextField SalaryField = new JTextField(20);
JTextField EmployerField = new JTextField(20);
String[] hourss = {"Fall", "Spring", "Summer"};
JComboBox hoursBox = new JComboBox(hourss);
JCheckBox[] departmentCheckBoxesBoxs = {new JCheckBox("Department 1"),
new JCheckBox("Department 2"),
new JCheckBox("Department 3"),
new JCheckBox("Department 4"),
new JCheckBox("Department 5")};
String[] Salary = {"section", "combo", "box"};
JComboBox sectionBox = new JComboBox(Salary);
JPanel fields = new JPanel();
JPanel departmentsPanel = new JPanel();
JPanel top = new JPanel();
JPanel bottom = new JPanel();
JButton submitButton = new JButton("Submit");
public tada() {
top.setBackground(Color.red);
JLabel title = new JLabel("Employer Design");
title.setFont(new Font("Helvetica", 1, 20));
top.add(title);
bottom.setBackground(Color.yellow);
fields.setLayout(new GridBagLayout());
GridBagConstraints gbcLabels = new GridBagConstraints();
GridBagConstraints gbcFields = new GridBagConstraints();
gbcLabels.gridx = 0;
gbcLabels.gridy = 0;
gbcLabels.anchor = GridBagConstraints.WEST;
gbcLabels.insets = new Insets(2, 2, 2, 2);
gbcFields.gridx = 1;
gbcFields.gridy = 0;
gbcFields.anchor = GridBagConstraints.WEST;
gbcFields.weightx = 1;
gbcFields.insets = new Insets(2, 2, 2, 2);
fields.add(usernameLabel, gbcLabels);
fields.add(usernameField, gbcFields);
gbcFields.gridy = ++gbcLabels.gridy;
fields.add(passwordLabel, gbcLabels);
fields.add(passwordField, gbcFields);
gbcFields.gridy = ++gbcLabels.gridy;
fields.add(empIDLabel, gbcLabels);
fields.add(empIDField, gbcFields);
gbcFields.gridy = ++gbcLabels.gridy;
fields.add(SalaryLabel, gbcLabels);
fields.add(SalaryField, gbcFields);
gbcFields.gridy = ++gbcLabels.gridy;
fields.add(EmployerLabel, gbcLabels);
fields.add(EmployerField, gbcFields);
gbcFields.gridy = ++gbcLabels.gridy;
fields.add(hoursLabel, gbcLabels);
fields.add(hoursBox, gbcFields);
departmentsPanel.add(departmentLabel);
for (JCheckBox jbc : departmentCheckBoxesBoxs) {
departmentsPanel.add(jbc);
}
GridBagConstraints gbc = new GridBagConstraints();
setLayout(new GridBagLayout());
gbc.gridx = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(top, gbc);
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.WEST;
add(fields, gbc);
// add(passwordPanel, gbc);
// add(empIDPanel, gbc);
// add(SalaryPanel, gbc);
// add(EmployerPanel, gbc);
// add(hoursPanel, gbc);
add(departmentsPanel, gbc);
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(bottom, gbc);
}
}
}
答案 1 :(得分:0)
BoxLayout
将面板与Y轴对齐。这是因为它们都是垂直堆叠的。
现在,要按照您想要的方式将组件排列在右侧,您需要为每个子面板添加布局管理器(例如usernamePanel,passwordPanel等)。一种方法是在X轴上对齐每个BoxLayout
新setAlignment()
。然后务必为每个JLabel
和JTextField
致电{{1}},以便他们排在左侧。