Как вычислить число из двух Jtextfield?

#java #swing #jtextfield #gettext #settext

#java #качать #jtextfield #gettext #settext

Вопрос:

Я разрабатываю систему заказа еды, в которой мне нужно получить ввод денежных средств, которые заплатил клиент, затем минус с общей ценой, которую им нужно заплатить, чтобы рассчитать изменение. Мой JTextField не может показать правильный ответ для изменения, он показывает только 0.0. Я не уверен, в чем проблема с моим кодом. Надеюсь, что вы все сможете мне помочь. Ценю вашу помощь, спасибо!

 public Cash() {
    init();
    btnPay.addActionListener(this);
    setVisible(true);
}

public String returnChange1() {
    double change = 0.00 ;
    double custPay;
    String total = lblDisplayTotal.getText();
    double a=Double.parseDouble(total);

    if (!(txtCustPay.getText().isEmpty())){
        custPay = Double.parseDouble(txtCustPay.getText());
        change = custPay - a;
    }
    return String.valueOf(change);
}

public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(btnPay)) {
        returnChange1();
    }
}

public void init() {
    txtChange = new JTextField(returnChange1());
    txtChange.setSize(150, 30);
    txtChange.setLocation(150, 250);
    add(txtChange);
}
  

Комментарии:

1. Единственный раз, когда вы присваиваете значение изменения txtChange полю, это во время инициализации (когда это не имеет значения, поскольку txtCustPay в этот момент не имеет значения). Вам нужно обновить свой, actionPerformed чтобы передать значение изменения в txtChange при выполнении.

Ответ №1:

Вы не назначаете функцию текстовому полю. В действии кнопки не просто вызывайте функцию, в этом случае вам следует назначить функцию текстовому полю: txtChange.setText(returnChange1()) , Также попробуйте поместить try и catch, где вы преобразуете текст в double:

 try{
    double a = Double.parseDouble(total);
}catch(NumberFormatException e){
    e.printStackTrace;
}
  

Приведенный выше код полезен, когда пользователь ошибочно вводит символ, который не является числом.

 public Cash() {
      
    init();
    btnPay.addActionListener(this);
    setVisible(true);

}

public String returnChange1() {

    double change = 0.00;
    double custPay;
    String total = lblDisplayTotal.getText();
    double a = Double.parseDouble(total);

    if (!(txtCustPay.getText().isEmpty())) {
        custPay = Double.parseDouble(txtCustPay.getText());
        change = custPay - a;
    }

    return String.valueOf(change);

}

public void actionPerformed(ActionEvent e) {

    if (e.getSource().equals(btnPay)) {
        txtChange.setText(returnChange1());
    }
}

public void init() {
    txtChange = new JTextField(returnChange1());
    txtChange.setSize(150, 30);
    txtChange.setLocation(150, 250);
    add(txtChange);
}