【问题标题】:Fill JComboBox after changing another JComboBox更改另一个 JComboBox 后填充 JComboBox
【发布时间】:2017-06-03 22:56:45
【问题描述】:

我有课

    public class Speciality {
    String specName;
    String eduProgram; }

还有一个 TreeMap Map<String, ArrayList<Speciality>> treeMap = new TreeMap<String, ArrayList<Speciality>>();,其中 String 是教师的姓名。

我的第一个 JComboBox 包含院系名称(因此它们等于我的地图中的键),在我的 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));
                    }
                }
            }
        });

【问题讨论】:

    标签: java arraylist jcombobox treemap


    【解决方案1】:

    据我了解,您的组合框 boxFaculty 显示了 treeMap 的键,它们是教师姓名,而您的组合框 boxSpeciality 应该显示每个教师的专业(这是 treeMap 的值之一)。

    如果您希望根据boxFaculty 的选择填充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 );
               }
            }
    
        }
    
    });
    

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

    【讨论】:

    • 它只更新一次,如果我想在我的应用程序中更改教师 Java 在这一行中说 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException specModel.removeAllElements();
    • 你在哪里实例化specModel,同时贴出NullPointerException的stacktrace。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多