无法从保存在对象中的ArrayList获取值,并且保存在HashMap中的对象

时间:2016-03-25 15:20:33

标签: java swing

我正在使用Swing,我无法从对象中保存的arrayList中获取值,然后将其保存在hashMap中。

system.out.println不打印任何值。

我的代码包含一个过程列表和一个参数列表。 单击添加参数按钮后,参数将添加到paramList

单击添加过程按钮后,从textfield获取的过程将保存在procList中。

来自paramList的值保存在新对象中(对象包含带有getter和setter的arraylist)

Hashmap将过程名称存储为key,将对象存储为value

然后,我有另一个事件,我们点击GUI上的过程列表,然后我们获取所选的过程名称,

所选的过程名称可以用作从HashMap获取值的Key。 我们使用密钥从hashmap获取参数的数组列表。

但是当我试图在GUI中显示它然后它是空白的,然后我试图看看是否有使用System.out.println的值并且没有打印的值:-(

问题在于private void getParameterList

这是代码。

//variable declaration
 String procedureName;
 String parameterName;
 ArrayList<String> procList = new ArrayList<>();
 ArrayList<String> paramList = new ArrayList<>();
 HashMap<String,ParamListPojo> procMapper = new HashMap<>();

private void Button_addParameterActionPerformed(java.awt.event.ActionEvent evt) {                                                    
       parameterName = paramField.getText();
       paramList.add(parameterName);
       //System.out.println(paramList);

       DefaultListModel paramListModel = new DefaultListModel();
       //populating DefaultListModel for parameters
        Iterator<String> it2 = paramList.iterator();
        while(it2.hasNext()){
            paramListModel.addElement(it2.next()); 
        }

        //populating parameterList
        parameterList.setModel(paramListModel); 
        paramField.setText(""); 
    }     

private void button_addProcedureActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        //procedureName = level_funcPrefix.getText() +procedureField.getText();
        ParamListPojo paramListPojo = new ParamListPojo();
        procList.add(procedureName);

        //Storing procedures and parameters in MAP
        paramListPojo.setParamList(paramList); 
        procMapper.put(procedureName,paramListPojo);
        System.out.println(procList);
        System.out.println(paramList);
        System.out.println(procMapper);

        procedureField.setText("");

         DefaultListModel procListModel  = new DefaultListModel();
         DefaultListModel paramListModel = new DefaultListModel();

         // populating DefaultListModel for procedureList
         Iterator<String> it1 = procList.iterator();
         while(it1.hasNext()){
             procListModel.addElement(it1.next());
         }

        //populating DefaultListModel for parameters
        Iterator<String> it2 = paramList.iterator();
        while(it2.hasNext()){
            paramListModel.addElement(it2.next()); 
        }

        // populating procedureList 
        procedureList.setModel(procListModel);
        procedureList.setSelectedIndex(procList.size()-1);

        //populating parameterList
        parameterList.setModel(paramListModel); 
        paramList.clear();
    }  

// populate Parameter List on GUI when procedure is selected 
    private void getParameterList(java.awt.event.MouseEvent evt) {                                  

        String procedure = procedureList.getSelectedValue();
        System.out.println("MouseClickEvent , procedure is "+procedure);

        //ParamListPojo prjL = new ParamListPojo();
        ParamListPojo prjL = procMapper.get(procedure);
        paramList = prjL.getParamList();

        System.out.println(paramList);
        //Declaring DefaultListModel for parameters
        DefaultListModel paramListModel = new DefaultListModel();

        Iterator<String> it = paramList.iterator();
        while(it.hasNext()){
            String parameter = it.next();
            paramListModel.addElement(parameter); 
            System.out.println(parameter);
        }

控制台输出

[p_csacas]
[scasca, ascacasc, ascacs]
{p_csacas=wrapperbuilder.ParamListPojo@1150594}
[p_csacas, f_ascasc]
[rrrrrr]
{p_csacas=wrapperbuilder.ParamListPojo@1150594, f_ascasc=wrapperbuilder.ParamListPojo@26df23}
MouseClickEvent , procedure is p_csacas
[]

因此我们可以看到,在添加过程时,值列在两个列表中,也在HashMAP中 但是,当鼠标点击GUI中的列表时,输出将变为空白。

GUI的示例图像如下所示 Sample Image of GUI

请帮助我:-(

1 个答案:

答案 0 :(得分:0)

问题解决了。 问题在于ParamListPojo类中的arrayList的setter方法。

public void setParamList(ArrayList<String> procList) {
        //this.prmList = procList;
                prmList.addAll(procList);
    }

之前我使用的是this.prmList = procList 现在我正在使用prmList.addAll(procList);