如何对表列求和并将总值设置为文本字段?

时间:2012-10-19 12:13:27

标签: java swing jtable

package com.orb;

import java.util.LinkedList;
import javax.swing.table.AbstractTableModel;
import com.orb.bean.Product;

public class ProductTableModel extends AbstractTableModel {

    private static final long serialVersionUID = -250883760398754970L;
    private final LinkedList<Product> list= new LinkedList<Product>();
    private final LinkedList<Boolean> checkList = new LinkedList<Boolean>();
    public void addItem(Product customer) {
        list.add(customer);
        checkList.add(false);
        fireTableDataChanged();
    }

    @Override
    public int getColumnCount() {
            return 5;
    }

    @Override
    public int getRowCount() {
        return list.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Object obj = null;

        if(columnIndex==4){
            setTotal(list.get(rowIndex));           
        }
        switch (columnIndex){
            case 0: obj= list.get(rowIndex).getCode() ;break;
            case 1: obj=list.get(rowIndex).getDescription(); break;
            case 2: obj=list.get(rowIndex).getQuantity();break;
            case 3: obj=list.get(rowIndex).getPrice();break;            
            case 4: obj=list.get(rowIndex).getTotal();break;            
        }
        return obj;
    }

    @Override
    public Class<?> getColumnClass(int arg0) {
        switch(arg0){
        case 0: case 1: return String.class; 
        case 2: return Integer.class; 
        case 3: case 4: return Double.class;
        }

        return super.getColumnClass(arg0);
    }
    @Override
    public boolean isCellEditable(int arg0, int arg1) {
        boolean isCellEditable = false;
        switch(arg1){
        case 2: case 3: isCellEditable= true;break;
        default: isCellEditable= false;break;
        }
        return isCellEditable;
        //return super.isCellEditable(arg0, arg1);
    }
    @Override
    public void setValueAt(Object arg0, int arg1, int arg2) {
        System.out.println("Value seted" +arg0 + arg1 + arg2);
        switch(arg2){
        case 0: break;
        case 1: break;
        case 2: list.get(arg1).setQuantity((Integer)arg0); setTotal(list.get(arg1)); break;
        case 3: list.get(arg1).setPrice((Double)arg0); setTotal(list.get(arg1));break;          
        case 4: list.get(arg1).setTotal((Double)arg0);break;

           //case 0: checkList.set(arg1, (Boolean)arg0);break;
           default:break;
        }
        //list.get(arg1).setTotal((Double)arg0);
        fireTableDataChanged();
    }

    public LinkedList<Product> getList() {
        LinkedList<Product> temp = new LinkedList<Product>();
        int index=-1;
        for(Boolean isSelected:checkList){
            index++;
            if(isSelected){
                temp.add(list.get(index));
            }
        }
        return temp;
    }

    public void setTotal(Product product){
        Double total = 0.0d;
        total = product.getQuantity ()* product.getPrice();
        product.setTotal(total);
    }
}

我有一个像上面这样的课程。我想对列进行求和,并将其总数设为JTextfield。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

必须