【问题标题】:get the sum of visible rows in a column获取列中可见行的总和
【发布时间】:2016-05-24 21:19:23
【问题描述】:

我有以下方法

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 列中所有行的总和。这工作正常。但是我有一个过滤表格的用户输入字段。然后我想对过滤后的行求和,我该怎么做呢?

【问题讨论】:

  • 用户输入字段如何过滤行?您从哪里获得这些值到您的程序中?
  • @Daniel Widdis 这些值来自一个 api,并且数据全部以表格形式放入 JTable 模型中。用户只需在 JTextField 中输入日期和时间,它会根据输入过滤行。

标签: java filter jtable sum


【解决方案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."); 
    }
    });    
}

希望对你有帮助,加油!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多