Java 在GroupLayout中使用JComboBox时获取InvalidStateException

Java 在GroupLayout中使用JComboBox时获取InvalidStateException,java,swing,jcombobox,grouplayout,Java,Swing,Jcombobox,Grouplayout,我第一次尝试GroupLayout。当我刚刚将组件添加到包含JPanel的列表中时,并不是所有的组件都出现了,但是JComboBox是出现的组件之一。在实例化组件之后,我使用了GroupLayoutAPI的addComponent方法,但是当我运行程序时,我在JComboBox上得到了一个InvalidStateException 这是密码 公共类PersonalInfo扩展了JPanel{ 私人JLabel jLabel1; 私有JTextField名字; 私有JTextField lastN

我第一次尝试
GroupLayout
。当我刚刚将组件添加到包含
JPanel
的列表中时,并不是所有的组件都出现了,但是
JComboBox
是出现的组件之一。在实例化组件之后,我使用了
GroupLayout
API的
addComponent
方法,但是当我运行程序时,我在
JComboBox
上得到了一个
InvalidStateException

这是密码

公共类PersonalInfo扩展了JPanel{
私人JLabel jLabel1;
私有JTextField名字;
私有JTextField lastName;
私人JLabel jLabel2;
专用JTextField地址1;
专用JTextField地址2;
私有JCheckBox toggleaddress 3;
私有JTextField地址3;
私营城市;
私有JTextField状态;
专用JTextField postalCode;
私人JLabel jLabel3;
私人JComboBox性别;
私人JLabel jLabel4;
//私人出生日期;
/**
*创建新表单PersonalInfo
*/
公共个人信息(){
初始化组件();
设置首选尺寸(新尺寸(400800));
验证();
}
私有组件(){
GroupLayout GroupLayout=新的GroupLayout(此);
setLayout(groupLayout);
groupLayout.setAutoCreateGaps(true);
groupLayout.setAutoCreateContainerGaps(true);
jLabel1=新JLabel(“名称”);
jLabel1.设置水平对齐(SwingConstants.右侧);
firstName=新的JTextField(50);
firstName.setToolTipText(“名字”);
lastName=新的JTextField(50);
setToolTipText(“姓氏”);
jLabel2=新的JLabel(“地址”);
jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
address1=新的JTextField(50);
地址1.设置工具脚本文本(“地址1”);
address2=新的JTextField(50);
地址2.设置工具脚本文本(“地址2”);
添加(地址2);
toggleAddress3=newjavax.swing.JCheckBox();
toggleaddress 3.setText(“显示第三个地址”);
toggleAddress3.addMouseListener(新的MouseListener(){
@凌驾
公共无效mouseClicked(MouseEvent e){
setToggle();
}
@凌驾
公共无效鼠标按下(MouseEvent e){
}
@凌驾
公共无效MouseEvent(MouseEvent e){
}
@凌驾
公共无效鼠标事件(鼠标事件e){
}
@凌驾
公共无效mouseExited(MouseEvent e){
}
});
address3=新的JTextField(50);
地址3.设置工具脚本文本(“地址3”);
地址3.setVisible(false);
城市=新的JTextField(50);
城市。setToolTipText(“城市”);
状态=新的JTextField(10);
state.setToolTipText(“state”);
postalCode=新的JTextField(25);
postalCode.setToolTipText(“邮政编码”);
jLabel3=新JLabel(“性别”);
jLabel3.设置水平对齐(SwingConstants.右侧);
添加(jLabel3);
字符串[]项={“,”男“,”女“};
性别=新JComboBox(项目);
性别。setToolTipText(“性别”);
jLabel4=新JLabel(“出生日期”);
jLabel4.设置水平对齐(SwingConstants.右侧);
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup()
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(名字)
.addComponent(姓氏))
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(地址1))
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.BASELINE)
.addComponent(TogleAddress3)
.addComponent(地址2))
.addComponent(地址3)
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.BASELINE)
.addComponent(城市)
.addComponent(状态)
.addComponent(后代码))
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
(性别)
.addComponent(jLabel4)
);
groupLayout.setVerticalGroup(groupLayout.createParallelGroup()
.addGroup(groupLayout.createParallelGroup(groupLayout.Alignment.Training))
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4));
}
私有void setToggle(){
if(toggleAddress3.isSelected()){
地址3.setVisible(false);
}否则{
地址3.setVisible(true);
}
重新油漆();
}
}
在此方面的任何帮助都将不胜感激

抓着我的头

汤姆·马加罗参见

每个组件需要在布局中定义两次。如果忘记执行此操作,
GroupLayout
将生成异常

您没有将所有组件同时添加到水平组和垂直组,因此您将得到异常

实际上,这是我建议实际使用IDE的GUI构建器的一次,因为
GroupLayout
是专门为GUI构建器创建的。使用构建器创建GUI后,请查看它生成的[java]代码,以了解
GroupLayout
的工作原理

我试图猜测您希望您的
PersonalInfo
面板的外观,并使用Eclipse WindowBuilder创建了一个面板。值得一提的是,这里是生成的代码

注意,我为出生日期字段添加了一个
JSpinner

imp