我有一个班级
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));
}
}
}
});
答案 0 :(得分:1)
据我了解,你的组合框boxFaculty
显示了treeMap
的教师姓名密钥,你的组合框boxSpeciality
应该显示每个教师的专业(这是其中一个值) treeMap
)。
如果您希望根据boxSpeciality
的选择填充boxFaculty
,则应在actionListener
上写一个boxFaculty
。
另一件需要注意的事情是,不要每次在动作侦听器中设置新的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 );
}
}
}
});
每当您选择boxSpeciality
中的项目时,这将更新boxFaculty
框。