Silent Heart
Silent Heart

Reputation: 77

How to Auto Calculate input numeric values of Text Field in JAVA

I have problem with Text Field Auto Calculation in JAVA using Netbeans 7.2

My Question is if I will input numeric values in Text Field i-e (admission fee, monthly fee, transport fee etc) for auto addition and then input numeric values in Text Field i-e (dues) to auto subtract from the above auto addition before clicking submit Button to insert the total values in database so how i will get result of those numeric values in Text Field (Total) before clicking submit Button.

Please check snapshot:

image

My Source code:

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

Upvotes: 4

Views: 25511

Answers (3)

Srinivasan. B
Srinivasan. B

Reputation: 1

enter image description hereYou can use MouseEntered event to auto display computed value in jtextfield as shown in the code

private void TxtnetpayMouseEntered(java.awt.event.MouseEvent evt) {                                       
  DecimalFormat numberFormat = new DecimalFormat("#.00");
  double totalgrosssalary = Double.parseDouble(Txttotalgrosspay.getText());
  double totaldeduct = Double.parseDouble(Txttotaldeduction.getText());     

    netpay = totalgrosssalary - totaldeduct; 
    String netpayy = String.valueOf(numberFormat.format(netpay));

    Txtnetpay.setText(netpayy);
}                                      

Upvotes: 0

trashgod
trashgod

Reputation: 205885

If you don't need an update for each keystroke, this alternate approach uses both a FocusListener and a PropertyChangeListener to update() the total as changes accrue.

image

Upvotes: 2

David Kroukamp
David Kroukamp

Reputation: 36423

I suggest use a DocumentFilter this will allow us to kill 2 birds with 1 stone.

1) we need to filter what is inputted to JTextFields to make sure our calculation wont go wrong

2) We need to update the total on the fly i.e as more digits are added/removed.

Here is an example I made which uses DocumentFilter and as you will see the Total field will be updated each time a new digit is entered/added to the JTextField(s) (also it wont allow alphabetic characters etc only digits):

enter image description here

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

Upvotes: 6

Related Questions