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