我碰到了同樣的問題的方式,這是我如何設法解決它(即使它是一個有點晚)
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.");
}
});
}
希望它有幫助,歡呼!
用戶輸入字段如何過濾行?你從哪裏獲得價值觀? –
@ Daniel Widdis這些值來自api,數據全部列表爲JTable模型。用戶只需輸入日期和時間到JTextField中,根據輸入過濾行。 – Ingram