当前位置: 首页 > 知识库问答 >
问题:

DefaultTableModel数据从以前编辑的单元格移动

年运珧
2023-03-14
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();
     }
}

共有1个答案

施德元
2023-03-14

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

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

所以,这意味着...

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 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编写程序来管理我的Bookie帐户。我是java的新手,所以我认为我会选择一些简单的方法来了解事情的原理。我决定使用表格视图并使各个单元格可编辑。我一直在关注本教程http://java- buddy.blogspot.co.uk/2012/04/javafx-2-editable-tableview.html 。它详细说明了如何使用Java代码执行此操作,并将其复

  • 问题内容: 我需要在jTable中显示数字,精确到小数点后两位。为此,我创建了一个自定义单元格编辑器,如下所示: 该单元格编辑器非常适合将点用作小数点的英语语言环境。但是在德语语言环境中,它不接受逗号作为小数点的值。请让我知道我的代码中有问题的地方。提前致谢。 编辑:这是我如何使其工作: 问题答案: 使用语言环境来发挥您的优势:

  • 这是豆子 这里的问题是连//////////////////都没有显示,这意味着HTML代码中存在问题,阻止了onCellEdit函数的执行!!!

  • 我想要一个有4列的jtable。一列必须是组合框。其他列是字符串。 只要找到问题:在注释语句jcb.seteditable(true)时;,如果我在comboxcell上单击一次,它就会打开这个单元格。但我不知道为什么效果更好。此外,我希望combox可编辑。 我怎么能对其他细胞有同样的行为。 再次您好,我已经更新了代码,以便使-如果我通过重写方法在单元格上单击一次,单元格可以编辑-如果我通过重写

  • 连接数据源后,Tableau会捕获源的元数据详细信息,例如列和列的数据类型。这用于创建视图中使用的度量,维度和计算字段。您可以浏览元数据并更改其属性以满足某些特定要求。 1. 检查元数据 连接数据源后,所有可能的表和列都将显示在数据源中。示例:用于检查元数据的源‘Sample Coffee Chain’。 单击“Data”菜单,然后选择与数据源连接。浏览名称为“Sample Coffee chai

  • 我在这个JTable上有问题。我这样编辑单元格 然后,我按Enter键提交更改。在这里,我希望gui用新的值刷新表。 但它们不显示,只有当我像这样更改选择时它们才显示 这是在TableModel中调用的。