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。我怎样才能做到这一点?

最佳答案

不得不


覆盖XxxTableModel中的Object getValueAt(int rowIndex, int columnIndex)
循环进入Column
使Number instance使用JFormattedTextField代替普通香草JTextField
也许会帮您这种逻辑,to store all amounts in JTable only

关于java - 如何汇总表列并将总值设置为文本字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12974086/

10-13 02:48