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

标签 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);
    }
}

我有一个像上面这样的类(class)。我想对列进行求和并将其总计放入 JTextfield 中。我怎样才能做到这一点?

最佳答案

必须

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

相关文章:

java - 匈牙利算法 - 从中​​选择 0 的最后一步,使得每行和每列只选择一个

java - Rx java 内存不足

java - JScrollPane:垂直条可见但不活动

java - Swing:鼠标事件和工具提示

Java 多 GUI 窗口创建

java - 当表添加到滚动 Pane 时,JTable 列标识符不显示

java - JTable 不显示任何内容?

java - 无法转发到请求的错误页面...因为已经提交了响应。结果,响应可能有错误的状态码

java - 如何将 $ 符号添加到 BigDecimal 类型

java - 在 JTable 中使用 JComboBox 作为单元格编辑器并保存更改