2016-05-24 5 views
0

У меня есть следующий методполучить сумму видимых строк в колонке

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. Это работает отлично. Однако у меня есть поле ввода пользователя, которое фильтрует таблицу. Затем я хочу суммировать отфильтрованные строки, как я могу это сделать?

+0

Как поле ввода пользователя фильтрует строку? Где вы получаете значения в своей программе? –

+0

@ Daniel Widdis значения поступают из api, и данные все табулированы в JTable Model. Пользователь просто вводит дату и время в JTextField, который фильтрует строки в зависимости от ввода. – Ingram

ответ

0

я наткнулся на такой же проблемой на пути, вот как мне удалось это исправить (хотя это немного поздно)

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."); 
    } 
    });  
} 

надеюсь, что это поможет, приветствия!

Смежные вопросы