Java 更改另一个JComboBox后填充JComboBox
我有一节课Java 更改另一个JComboBox后填充JComboBox,java,arraylist,jcombobox,treemap,Java,Arraylist,Jcombobox,Treemap,我有一节课 public class Speciality { String specName; String eduProgram; } 和一个TreeMapMap TreeMap=newtreemap()其中字符串是教师的名称 我的第一个JComboBox由学院名称组成(因此它们相当于我地图中的键),在我的框ActionListener中,我需要用specNames数组填充我的第二个JComboBox 在这里,您可以看到我实际需要的内容,但ofc它不支持word(因
public class Speciality {
String specName;
String eduProgram; }
和一个TreeMapMap TreeMap=newtreemap()代码>其中字符串是教师的名称
我的第一个JComboBox由学院名称组成(因此它们相当于我地图中的键),在我的框ActionListener
中,我需要用specNames
数组填充我的第二个JComboBox
在这里,您可以看到我实际需要的内容,但ofc它不支持word(因为我将String[]转换为String)
boxSpeciality.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
对于(int i=0;i
据我所知,您的组合框boxFaculty
显示treeMap
的键,这些键是教员姓名,您的组合框boxSpeciality
应该显示每个教员的专长(这是treeMap
的值之一)
如果希望根据选择的boxFaculty
填充boxfeculty
,则应在boxFaculty
上编写actionListener
另一件需要注意的事情是,不要每次都在action listener中设置一个新的DefaultComboxModel
。在定义组合框并在操作侦听器中更新其元素时设置一个
您可以执行以下操作:
DefaultComboBoxModel<Speciality> specialityModel = new DefaultComboBoxModel<Speciality>();
boxSpeciality.setModel( specialityModel );
boxFaculty.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Object obj = boxFaculty.getSelectedItem();
if ( obj != null )
{
ArrayList<Speciality> specialities = treeMap.get( obj );
specialityModel.removeAllElements();
for ( Speciality speciality : specialities )
{
specialityModel.addElement( speciality );
}
}
}
});
DefaultComboxModel specialityModel=new DefaultComboxModel();
boxSpeciality.setModel(specialityModel);
addActionListener(新ActionListener())
{
@凌驾
已执行的公共无效操作(操作事件e)
{
Object obj=boxFaculty.getSelectedItem();
如果(obj!=null)
{
ArrayList specialities=treeMap.get(obj);
specialityModel.removeAllElements();
用于(专业:专业)
{
特殊模型。附加元素(特殊);
}
}
}
});
每当您在boxFaculty
中选择一个项目时,这将更新boxSpeciality
框,如果我想更改我的应用程序中的faculty,它只会更新一次,这一行的Java says线程“AWT-EventQueue-0”Java.lang.NullPointerException
中的异常specModel.removalelements()
您在哪里实例化specModel
,同时发布NullPointerException
的堆栈跟踪。
DefaultComboBoxModel<Speciality> specialityModel = new DefaultComboBoxModel<Speciality>();
boxSpeciality.setModel( specialityModel );
boxFaculty.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
Object obj = boxFaculty.getSelectedItem();
if ( obj != null )
{
ArrayList<Speciality> specialities = treeMap.get( obj );
specialityModel.removeAllElements();
for ( Speciality speciality : specialities )
{
specialityModel.addElement( speciality );
}
}
}
});