我有课
public class Speciality {
String specName;
String eduProgram; }
和 TreeMap Map<String, ArrayList<Speciality>> treeMap = new TreeMap<String, ArrayList<Speciality>>();
其中 String 是教师姓名。
我的第一个 JComboBox 包含院系名称(因此它们等于我的 map 中的键)和我的 BoxActionListener
中的名称。我需要用 specNames
数组填充我的第二个 JComboBox 。
在这里你可以看到我真正需要的东西,但是 ofc 它没有文字(因为我将 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
的值之一)。
如果你想要boxSpeciality
根据 boxFaculty
的选择进行填充,你应该写一个 actionListener
上boxFaculty
.
另一件事要注意的是不要设置新的 DefaultComboboxModel
每次在 Action 监听器中。在定义组合框并在操作监听器中更新其元素时设置 1。
您可以执行如下操作:
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
中选择一个项目时都会出现框.
关于java - 更改另一个 JComboBox 后填充 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349264/