0

「ステップ」のリストから JTable を動的に埋めています。ある種の「開始」ステップは、複数のアクションを含む可能性があるため、他のステップとは異なりますが、他のすべてのステップ タイプには 1 つのアクションのみが含まれます。そのため、「オープン」タイプのステップに到達したときに、次のようにすべてのアクションを同じテーブルに未加工で追加したいと思います。

 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;
        }

    };
}

ステップクラスは次のとおりです。

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

何が悪いのか考えている人はいますか?

少し早いですがお礼を!

4

1 に答える 1