java - 更改另一个 JComboBox 后填充 JComboBox

标签 java arraylist jcombobox treemap

我有课

    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 的选择进行填充,你应该写一个 actionListenerboxFaculty .

另一件事要注意的是不要设置新的 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/

相关文章:

java 数组列表迭代异常

java - 数组列表中的斐波那契数列

java - 来自同一枚举的动态 JComboBox

java - JComboBox的ActionListener并初始化JPanel

java - 我可以将数组的一部分设为最终/不可更改吗?

java - 将字符串添加到此字符串数组的最有效方法是什么?

java - 获取局部变量

java - 运行另一个 firefox.exe,而不是默认使用 Remote WebDriver 实现的 firefox.exe

java - 如何直接从文件向 Java 中的 ArrayList 添加项目?

java - 我可以修改现有对象的 JComboBox 弹出窗口背景颜色吗?