2013-03-05 37 views
0

我從「步驟」列表中填充了一個JTable動態列表。通過包含多個動作的可能性,而其他所有步驟類型僅包含一個動作,從其他步驟開始排序「開放」步驟。爲此,我想 - 當達到「開放」類型 - 同時添加在同一個表中的原始的所有行動這樣的步驟:用多個列表數據填充JTable行java

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  ..  ... 

其中「刪除」和「替換」被擴展的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 

Does anyO ne有一個想法最新怎麼了?

提前致謝!

回答

0

好吧,明白了。 當達到「操作」步驟類型時,外部循環中的索引j指向步驟的操作列表。但是在內部循環中,k自己遍歷動作列表,並通過將字符串添加到原始數據結束。問題是,J繼續運行在右邊的相同的動作列表,在下一個循環..因此在最後一個循環中,字符串只包含任何內容。

我的解決方法是通過更改Step類將整個步驟數據包含在一個uniq字符串中,然後我只需填寫'oppening'步驟數據,就像所有其他步驟類型一樣,不需要內部循環。我知道這可能是更好的解決方法,但是由於某些其他原因,我需要更改Step階層結構,所以我利用它。