Swing 用多个列表数据填充JTable行

Swing 用多个列表数据填充JTable行,swing,jtable,Swing,Jtable,我正在从“步骤”列表中填写JTable DynamicCaly。排序为“开始”的步骤与其他步骤不同,可能包含多个操作,而所有其他步骤类型仅包含一个操作。因此,当达到“打开”类型的步骤时,我希望将其所有操作都添加到同一个表中,如下所示: step name Action on Object value result opening full open door1 30 ... delete replace

我正在从“步骤”列表中填写JTable DynamicCaly。排序为“开始”的步骤与其他步骤不同,可能包含多个操作,而所有其他步骤类型仅包含一个操作。因此,当达到“打开”类型的步骤时,我希望将其所有操作都添加到同一个表中,如下所示:

 step name     Action     on Object  value   result
opening      full open    door1       30     ...    delete  replace
             haulgh open  door2       40            delete  replace
             wholeOpen    door1       10            delete  replace

comparison   compare      state1      ..      ...
其中“delete”和“replace”是JButton的扩展。 我编写的代码如下:

public DefaultTableModel ListToTableModel(Object[] l, String tableName) throws Exception {

    Vector<String> columnNames = null;
    Vector<Vector<Object>> data = new Vector<>();
    columnNames = new Vector<>(Arrays.asList(" Step name:  ","  Action: ","  On object: ","  Action value: "," Action result: ","                          ","                              "));
    for (int i = 0; i < l.length; i++) {

        for(int j=0;j<((Step) l[i]).action.size();j++){
            Vector<Object> vector = new Vector<>();
            String string="";int k=0;
            if(((Step) l[i]).Name=="opening"){
                 vector.add(((Step) l[i]).Name);

                 for(k=0;k<((Step) l[i]).action.size();k++){
                     string+=((Step) l[i]).action.get(k)+"\n";
                 }
                 vector.add(string);
                 string="";

                 for( k=0;k<((Step) l[i]).onObject.size();k++){
                     string+=((Step) l[i]).onObject.get(k)+"\n";
                 }
                 vector.add(string);
                 string="";

                 for(k=0;k<((Step) l[i]).value.size();k++){
                     string+=((Step) l[i]).value.get(k)+"\n";
                 }
                 vector.add(string);
                 string="";

                 for( k=0;k<((Step) l[i]).result.size();k++){
                     string+=((Step) l[i]).result.get(k)+"\n";
                 }
                 vector.add(string);
                 break;
            }
            else
            {
                vector.add(((Step) l[i]).Name);
                vector.add(((Step) l[i]).action.get(j));
                vector.add(((Step) l[i]).onObject.get(j));
                vector.add(((Step) l[i]).value.get(j));
                vector.add(((Step) l[i]).result.get(j));
                vector.add("delete");
                vector.add("Replace");
            }
            data.add(vector);
        }
        }
    return new DefaultTableModel(data, columnNames) {

        @Override
        public boolean isCellEditable(int rowIndex, int mColIndex) {
            return true;
        }

    };
}
是:

有人知道这有什么问题吗

提前感谢

好的,明白了。 当到达“oppenning”步骤类型时,外部循环的索引j指向该步骤的操作列表。但是在内部循环中,k本身在操作列表上运行,并通过将字符串添加到原始值来结束。问题是,J在下一个循环中继续运行在同一个操作列表的右边。因此,在最后一个循环中,字符串不包含任何内容

我解决这个问题的方法是,改变Step类的结构,将整个Step数据包含在一个uniq字符串中,然后我只需以与所有其他Step类型相同的方式填充“oppening”Step数据,而不使用内部循环。我知道这可能是一种更好的解决方法,但由于其他一些原因,我需要更改Step类结构,所以我利用了它

public class Step {
public String Name=null;
public List<String> action=null;
public List<String> onObject=null;
public List<String> value=null;
public List<String> result=null;

public Step(String n){
    Name=n;
    action=new ArrayList<String>();
    onObject=new ArrayList<String>();
    value=new ArrayList<String>();
    result=new ArrayList<String>();
}

public void add(String act,String onobject ,String val,String res){
    action.add(act);
    onObject.add(onobject);
    value.add(val);
    result.add(res);
}
Step step=new Step("opening");
    step.add("full open","door1","30.0","door_1");
    step.add("haulgh open","door2","40.0","door_2");
    step.add("whole open","door3","40.0","door_3");
           Controller.getStepList().add(step);

    step=new Step("comparison");
    step.add("compare","state1","--","state_1");
       Controller.getStepList().add(step);
step name  Action   on Object  value  result
comparison  compare  state1      --    state_1