【发布时间】:2021-04-20 15:44:31
【问题描述】:
我是第一次尝试GroupLayout。当我刚刚将组件添加到包含 JPanel 的组件时,并非所有组件都显示了,但 JComboBox 是确实显示的组件之一。实例化组件后,我使用了GroupLayout API 的addComponent 方法,但是当我运行程序时,我在JComboBox 上得到了一个InvalidStateException。
这里是代码
public class PersonalInfo extends JPanel {
private JLabel jLabel1;
private JTextField firstName;
private JTextField lastName;
private JLabel jLabel2;
private JTextField address1;
private JTextField address2;
private JCheckBox toggleAddress3;
private JTextField address3;
private JTextField city;
private JTextField state;
private JTextField postalCode;
private JLabel jLabel3;
private JComboBox<String> gender;
private JLabel jLabel4;
// private Date dateOfBirth;
/**
* Creates new form PersonalInfo
*/
public PersonalInfo() {
initComponents();
setPreferredSize(new Dimension(400, 800));
validate();
}
private void initComponents() {
GroupLayout groupLayout = new GroupLayout(this);
setLayout(groupLayout);
groupLayout.setAutoCreateGaps(true);
groupLayout.setAutoCreateContainerGaps(true);
jLabel1 = new JLabel("Name");
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
firstName = new JTextField(50);
firstName.setToolTipText("First Name");
lastName = new JTextField(50);
lastName.setToolTipText("Last Name");
jLabel2 = new JLabel("Address");
jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
address1 = new JTextField(50);
address1.setToolTipText("Address 1");
address2 = new JTextField(50);
address2.setToolTipText("Address 2");
add(address2);
toggleAddress3 = new javax.swing.JCheckBox();
toggleAddress3.setText("Show third address");
toggleAddress3.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
setToggle();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
address3 = new JTextField(50);
address3.setToolTipText("Address 3");
address3.setVisible(false);
city = new JTextField(50);
city.setToolTipText("City");
state = new JTextField(10);
state.setToolTipText("State");
postalCode = new JTextField(25);
postalCode.setToolTipText("Postal Code");
jLabel3 = new JLabel("Gender");
jLabel3.setHorizontalAlignment(SwingConstants.RIGHT);
add(jLabel3);
String[] items = {"", "Male", "Female"};
gender = new JComboBox<String>(items);
gender.setToolTipText("Gender");
jLabel4 = new JLabel("Date of Birth");
jLabel4.setHorizontalAlignment(SwingConstants.RIGHT);
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup()
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(firstName)
.addComponent(lastName))
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(address1))
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(toggleAddress3)
.addComponent(address2))
.addComponent(address3)
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(city)
.addComponent(state)
.addComponent(postalCode))
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(gender))
.addComponent(jLabel4)
);
groupLayout.setVerticalGroup(groupLayout.createParallelGroup()
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.TRAILING))
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4));
}
private void setToggle() {
if (toggleAddress3.isSelected()) {
address3.setVisible(false);
} else {
address3.setVisible(true);
}
repaint();
}
}
非常感谢任何帮助。
挠头,
汤姆·马加罗
【问题讨论】:
标签: java swing jcombobox grouplayout