更改另一个 JComboBox 后填充 JComboBox

Fill JComboBox after changing another JComboBox

我有一个class

    public class Speciality {
    String specName;
    String eduProgram; }

和 TreeMap Map<String, ArrayList<Speciality>> treeMap = new TreeMap<String, ArrayList<Speciality>>();,其中 String 是教职工的姓名。

我的第一个 JComboBox 由院系名称组成(因此它们等于我的地图中的键),在我的 BoxActionListener 中,我需要用 specNames 的数组填充我的第二个 JComboBox。

在这里你可以看到我真正需要的东西,但是它没有字(因为我将 String[] 转换为 String)

boxSpeciality.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for(int i = 0; i < treeMap.size(); i++){
                    Object key = treeMap.keySet().toArray(new Object[treeMap.size()])[i];
                    ArrayList<Speciality> value = treeMap.get(key);


                    if(key == boxFaculty.getSelectedItem()){
                        boxSpeciality.setModel(new DefaultComboBoxModel((String[]) value.get(i).specName));
                    }
                }
            }
        });

据我了解,您的组合框 boxFaculty 显示 treeMap 的键,它们是教员姓名,您的组合框 boxSpeciality 应该显示每个教员的专业(这是其中一个treeMap ).

的值

如果您希望根据 boxFaculty 的 select 填充 boxSpeciality,您应该在 boxFaculty 上写一个 actionListener

另一件需要注意的事情是不要每次都在动作侦听器中设置新的 DefaultComboboxModel。在定义组合框并在动作侦听器中更新其元素时设置一个。

您可以执行如下操作:

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 );
           }
        }

    }

});

这将在您每次 select boxFaculty 中的项目时更新 boxSpeciality 框。