我碰到了同样的问题的方式,这是我如何设法解决它(即使它是一个有点晚)
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