如何自动计算JAVA中文本字段的输入数值

我在使用Netbeans 7.2的JAVA中使用文本字段自动计算时遇到问题

我的问题是我是否会在文本字段中输入数值,即(入场费,月费,运费等)自动添加,然后在文本字段中输入数值,即(会费)自动从上面的自动添加中减去,然后再单击提交用于在数据库中插入总值的按钮,以便在单击“提交”按钮之前如何在“文本字段(总计)”中获取这些数值的结果。

请检查快照:

图片http://sofzh.miximages.com/java/image.jpg

我的源代码:

try { String insrt = "Insert into fee (admission, monthly, transport, dues, total) values (?, ?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(insrt); pstmt.setString(1, adm_fee.getText()); pstmt.setString(2, mnth_fee.getText()); pstmt.setString(3, trnsprt_fee.getText()); pstmt.setString(4, dues_fee.getText()); pstmt.setString(5, total_fee.getText()); pstmt.executeUpdate(); JOptionPane.showMessageDialog(null,"Record successfully inserted"); } catch (Exception exp) { JOptionPane.showMessageDialog(null, exp); } 

我建议使用DocumentFilter这将允许我们用1石头杀死2只鸟。

1)我们需要过滤输入到JTextField的内容,以确保我们的计算不会出错

2)我们需要动态更新总数,即添加/删除更多数字。

下面是我使用DocumentFilter的示例,您将看到每次输入/添加到JTextField时都会更新Total字段(也不会允许字母字符等只有数字):

在此处输入图像描述

 import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DocumentFilter; import javax.swing.text.DocumentFilter.FilterBypass; public class DocumentFilterOnTheFlyCalculation { public DocumentFilterOnTheFlyCalculation() { createAndShowGui(); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new DocumentFilterOnTheFlyCalculation(); } }); } private void createAndShowGui() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(4, 2)); JLabel label1 = new JLabel("Add:"); final JTextField jtf1 = new JTextField(); JLabel label2 = new JLabel("Add:"); final JTextField jtf2 = new JTextField(); JLabel label3 = new JLabel("Subtract:"); final JTextField jtf3 = new JTextField(); JLabel totalLabel = new JLabel("Total:"); final JTextField totalField = new JTextField("0"); totalField.setEditable(false); DocumentFilter df = new DocumentFilter() { @Override public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException { if (isDigit(string)) { super.insertString(fb, i, string, as); calcAndSetTotal(); } } @Override public void remove(FilterBypass fb, int i, int i1) throws BadLocationException { super.remove(fb, i, i1); calcAndSetTotal(); } @Override public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException { if (isDigit(string)) { super.replace(fb, i, i1, string, as); calcAndSetTotal(); } } private boolean isDigit(String string) { for (int n = 0; n < string.length(); n++) { char c = string.charAt(n);//get a single character of the string //System.out.println(c); if (!Character.isDigit(c)) {//if its an alphabetic character or white space return false; } } return true; } void calcAndSetTotal() { int sum = 0; if (!jtf1.getText().isEmpty()) { sum += Integer.parseInt(jtf1.getText());//we must add this } if (!jtf2.getText().isEmpty()) { sum += Integer.parseInt(jtf2.getText());//we must add this } if (!jtf3.getText().isEmpty()) { sum -= Integer.parseInt(jtf3.getText());//we must subtract this } totalField.setText(String.valueOf(sum)); } }; ((AbstractDocument) (jtf1.getDocument())).setDocumentFilter(df); ((AbstractDocument) (jtf2.getDocument())).setDocumentFilter(df); ((AbstractDocument) (jtf3.getDocument())).setDocumentFilter(df); frame.add(label1); frame.add(jtf1); frame.add(label2); frame.add(jtf2); frame.add(label3); frame.add(jtf3); frame.add(totalLabel); frame.add(totalField); frame.pack(); frame.setVisible(true); } } 

如果您不需要每次击键更新,则此备用方法使用FocusListenerPropertyChangeListenerupdate()总计,因为更改会产生。

图片