更改另一个 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
框。
我有一个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
框。