gpt4 book ai didi

java - DefaultTableModel 数据从先前编辑的单元格中移动

转载 作者:行者123 更新时间:2023-12-02 05:53:16 25 4
gpt4 key购买 nike

由于某种奇怪的原因,每次我在任何单元格中编辑数据并确认它时一旦我进入下一个,它就会从之前编辑的单元格复制数据

有什么想法吗?

public class CheckoutTableModel extends DefaultTableModel {

private String[] columnNames= {"Brand","Model","Price","Quantity","Total Price"};
private List<Integer> id;
private List<CheckoutItem> basketItems;
private static final long serialVersionUID = 7944308974044321712L;


public CheckoutTableModel()
{
id=new ArrayList<>();
basketItems=new ArrayList<>();
}

public CheckoutTableModel(List<Item>db, ArrayList<Integer>quantity)
{
id=new ArrayList<>();
basketItems=new ArrayList<>();
for (int i = 0 ; i < db.size() ; i++)
{
basketItems.add(new CheckoutItem(db.get(i).getBrand(), db.get(i).getModel(), db.get(i).getPrice(), quantity.get(i)));
}
}

public void setValueAt(Object value, int row, int column)
{
switch(column)
{
case 1:
basketItems.get(row).setBrand((String)value);
case 2:
basketItems.get(row).setModel((String)value);
case 3:
basketItems.get(row).setPrice((double)value);
case 4:
basketItems.get(row).setQuantity(Integer.parseInt((String) value));
case 5:
basketItems.get(row).setTotalPrice(Double.parseDouble((String) value));
}
}

public int getRowCount() {
if(basketItems==null)
{
return 0;
}
else
return basketItems.size();
}

public int getColumnCount() {
return 5;
}

public String getColumnName(int column) {
return columnNames[column];
}

public Object getValueAt(int row, int column) { //set values of cells
switch(column)
{
case 0:
return basketItems.get(row).getBrand();
case 1:
return basketItems.get(row).getModel();
case 2:
return basketItems.get(row).getPrice();
case 3:
return basketItems.get(row).getQuantity();
case 4:
return basketItems.get(row).getTotalPrice();
}
return null;
}

public void setTableModel(List<Item>db, List<Integer>quantities){
id=new ArrayList<>();
basketItems=new ArrayList<>();
for (int i = 0 ; i < db.size() ; i++)
{
basketItems.add(new CheckoutItem(db.get(i).getBrand(), db.get(i).getModel(), db.get(i).getPrice(), quantities.get(i)));
}
}

public boolean isCellEditable(int row,int column)
{
switch(column){

case 0: // select the cell you want make it not editable
return false;
case 1: // select the cell you want make it not editable
return false;
case 2:
return true;
case 3:
return true;
case 4:
return false;
default: return false;}
}

@SuppressWarnings("unchecked")
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
}

最佳答案

因此,您的 setValueAt 方法中至少存在两个问题...

  1. 列(和行)已被 0 索引
  2. switch 语句将允许执行一个案例以及下面的所有子案例...

所以,这意味着......

public void setValueAt(Object value, int row, int column)
{
switch(column)
{
case 1:
basketItems.get(row).setBrand((String)value);
case 2:
basketItems.get(row).setModel((String)value);
case 3:
basketItems.get(row).setPrice((double)value);
case 4:
basketItems.get(row).setQuantity(Integer.parseInt((String) value));
case 5:
basketItems.get(row).setTotalPrice(Double.parseDouble((String) value));
}
}

如果column == 1,则执行情况1、2、3、4和5。如果column == 3,则执行情况3、4和5。

因此,首先,您需要修改 switch 以使 casegetValueAt 方法匹配相同的顺序,并添加每个 case 之后的 break 语句,以防止执行以下 case,例如...

public void setValueAt(Object value, int row, int column)
{
switch(column)
{
case 0:
basketItems.get(row).setBrand((String)value);
break;
case 1:
basketItems.get(row).setModel((String)value);
break;
case 2:
basketItems.get(row).setPrice((double)value);
break;
case 3:
basketItems.get(row).setQuantity(Integer.parseInt((String) value));
break;
case 4:
basketItems.get(row).setTotalPrice(Double.parseDouble((String) value));
break;
}
}

关于java - DefaultTableModel 数据从先前编辑的单元格中移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23350956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com