我的问题是,当我在Vector中添加例如3个输入时,当我显示结果时,我只找到了最后一个输出。
XMLTable,Table,Column = classes
cols:包含问题的向量
代码:
btnSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
XMLTable xt= new XMLTable();
Table table = new Table();
Column col = new Column();
Vector<String> txtF = new Vector<String>();
Vector<String> comboF = new Vector<String>();
Vector<Column> cols = new Vector<Column>();
Component[] comp = columns.getComponents();
for(Component c : comp){
if (c instanceof JTextField){
txtF.add(((JTextField) c).getText());
//col.setName(((JTextField) c).getText());
}
else if(c instanceof JComboBox){
comboF.add(((JComboBox<String>) c).getSelectedItem().toString());
//col.setType(((JComboBox<String>) c).getSelectedItem().toString());
}
}
for(int i=0; i<txtF.size();i++){
col.setName(txtF.get(i));
//System.out.println("NAMEE: "+txtF.get(i));
col.setType(comboF.get(i));
//System.out.println("Type: "+comboF.get(i));
cols.add(col);
}
for(int i=0;i<cols.size();i++){
System.out.println("Column : "+i);
System.out.println("name : "+cols.elementAt(i).getName());
System.out.println("type : "+cols.elementAt(i).getType());
}
INPUT:
name : a Type : String
name : b Type : Numeric
name : c Type : String
输出:
Column : 0
name : c
type : String
Column : 1
name : c
type : String
Column : 2
name : c
type : String
答案 0 :(得分:0)
您将同一个对象一遍又一遍地添加到cols
,因为col
始终是同一个对象。请记住,您通过引用处理对象(eventhough Java is alway pass-by-value,如果将对象传递给方法,则实际传递对象引用,而不是对象本身)。要解决此问题,请删除第五行中Column col = ...
的声明,然后将第二个for loop
更改为:
[...]
for(int i=0; i<txtF.size();i++){
Column col = new Column(); // Declaration moved to here
col.setName(txtF.get(i));
//System.out.println("NAMEE: "+txtF.get(i));
col.setType(comboF.get(i));
//System.out.println("Type: "+comboF.get(i));
cols.add(col);
}
[...]
这可以解决您的问题。