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; }
和一个TreeMap
Map 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 );
           }
        }

    }

});