有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取列中可见行的总和

我有以下方法

public void availableCapacity(){
    double total = 0.0;
    double total1 = 0.0;
    for (int i = 0; i < tableR.getRowCount(); i++){
        double amount1 = Double.parseDouble((String) tableR.getValueAt(i, 10));
        double amount = Double.parseDouble((String) tableR.getValueAt(i, 11));
        total += amount;
        total1 += amount1;
    }
    System.out.println(total +" " + total1);
    sumavailbleField.setText(Double.toString(total));
}

这当前获取第10列和第11列中所有行的总和。这个很好用。然而,我有一个用户输入字段来过滤表。然后我想对过滤后的行求和,我该怎么做呢


共 (1) 个答案

  1. # 1 楼答案

    我在路上遇到了同样的问题,下面是我如何解决它(尽管有点晚了)

    public void availableCapacity(JTable tableR){
    double total = 0.0;
    double total1 = 0.0;
    for (int i = 0; i < tableR.getRowCount(); i++){
            try{
        double amount1 = Double.parseDouble((String) tableR.getValueAt(i, 10));
        total1 += amount1;
            }catch(Exception ex){System.err.println("ex badNumberInput:"+ex);}
    
            try{
        double amount = Double.parseDouble((String) tableR.getValueAt(i, 11));
        total += amount;
            }catch(Exception ex){System.err.println("ex badNumberInput:"+ex);}
    
    }
    
    System.out.println(total +" " + total1);
    
    BigDecimal nr = new BigDecimal(total);
    String roundedResult = nr.setScale(2, RoundingMode.HALF_EVEN).toString();
    sumavailbleField.setText(roundedResult);
    }
    

    然后我将这个documentListener添加到一个jTextField中,以获取tableR值

    public void jLabelFilter(JTable tableR){
    
    TableRowSorter<TableModel> rowSorter = new TableRowSorter<>(tableR.getModel());   
    tableR.setRowSorter(rowSorter);
    
    //jtfFilter is the jTextField from user input    
    jtfFilter.getDocument().addDocumentListener(new DocumentListener(){
    
            @Override
            public void insertUpdate(DocumentEvent e) {
                String text = jtfFilter.getText();
                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                    availableCapacity(tableR);
    
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
                    availableCapacity(tableR);
                }
            }
    
            @Override
            public void removeUpdate(DocumentEvent e) {
                String text = jtfFilter.getText();
                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                    availableCapacity(tableR);
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
                    availableCapacity(tableR);
                }
            }
    
            @Override
            public void changedUpdate(DocumentEvent e) {
                throw new UnsupportedOperationException("Not supported yet."); 
        }
        });    
    }
    

    希望有帮助,干杯