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