JTextArea Отображает 0 после нажатия кнопки расчета

Я пишу этот код для университета, чтобы прочитать ввод пользователя и рассчитать расходы (это счет больницы)

Но когда я нажимаю вычислить JTextArea дисплеи 0 как ценность

Я очень новичок, поэтому любые рекомендации будут оценены

код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HospitalChargesCalculator extends JFrame implements ActionListener{

private JLabel hospitalStayLabel;
private JLabel medicationLabel;
private JLabel surgicalFeesLabel;
private JLabel labFeesLabel;
private JLabel rehabLabel;
private JLabel totalLabel;

private JTextField hospitalStayTF;
private JTextField medicationTF;
private JTextField surgicalFeesTF;
private JTextField labFeesTF;
private JTextField rehabTF;

private JTextArea totalChargesTA;

private JButton calculateB;
private JButton exitB;

public static final int WIDTH = 500;
public static final int HEIGHT = 350;

static int totalStayCharge;
static int totalMisc;
static int totalCharges;

static int totalDays;
static int totalMedication;
static int totalSurgical;
static int totalLab;
static int totalRehab;

public HospitalChargesCalculator() {
    setTitle("Hospital Charges");
    Container c = getContentPane();
    setSize(WIDTH, HEIGHT);

    c.setLayout(null);

    hospitalStayLabel = new JLabel(" Number of days spent in hospital: ",
            SwingConstants.LEFT);
    medicationLabel = new JLabel(" Total Medication Charges: ",
            SwingConstants.LEFT);
    surgicalFeesLabel = new JLabel(" Total sugical charges : ",
            SwingConstants.LEFT);
    labFeesLabel = new JLabel(" Total lab fees: ",
            SwingConstants.LEFT);
    rehabLabel = new JLabel(" Total Rehab charges: ",
            SwingConstants.LEFT);
    totalLabel = new JLabel(" Total Charges: ",
            SwingConstants.LEFT);

    calculateB = new JButton("Calculate");
    calculateB.addActionListener(this);
    exitB = new JButton("Exit");
    exitB.addActionListener(this);


    hospitalStayTF = new JTextField();
    medicationTF = new JTextField();
    surgicalFeesTF = new JTextField();
    labFeesTF = new JTextField();
    rehabTF = new JTextField();


    totalChargesTA = new JTextArea();

    hospitalStayLabel.setSize(250, 30);
    hospitalStayTF.setSize(200, 30);
    medicationLabel.setSize(200, 30);
    medicationTF.setSize(200, 30);
    surgicalFeesLabel.setSize(200, 30);
    surgicalFeesTF.setSize(200, 30);
    labFeesLabel.setSize(200, 30);
    labFeesTF.setSize(200, 30);
    rehabLabel.setSize(200, 30);
    rehabTF.setSize(200,30);
    totalLabel.setSize(200, 30);
    totalChargesTA.setSize(200,30);
    calculateB.setSize(100, 30);
    exitB.setSize(100, 30);

    hospitalStayLabel.setLocation(30, 25);
    hospitalStayTF.setLocation(250, 25);
    medicationLabel.setLocation(30, 60);
    medicationTF.setLocation(250, 60);
    surgicalFeesLabel.setLocation(30, 95);
    surgicalFeesTF.setLocation(250, 95);
    labFeesLabel.setLocation(30, 130);
    labFeesTF.setLocation(250, 130);
    rehabLabel.setLocation(30, 165);
    rehabTF.setLocation(250, 165);
    totalLabel.setLocation(30, 250);
    totalChargesTA.setLocation(250, 250);
    calculateB.setLocation(70, 205);
    exitB.setLocation(300, 205);

    c.add(hospitalStayLabel);
    c.add(hospitalStayTF);
    c.add(medicationLabel);
    c.add(medicationTF);
    c.add(surgicalFeesLabel);
    c.add(surgicalFeesTF);
    c.add(labFeesLabel);
    c.add(labFeesTF);
    c.add(rehabLabel);
    c.add(rehabTF);
    c.add(totalLabel);
    c.add(totalChargesTA);
    c.add(calculateB);
    c.add(exitB);

    hospitalStayTF.addActionListener(this);
    medicationTF.addActionListener(this);
    surgicalFeesTF.addActionListener(this);
    labFeesTF.addActionListener(this);
    rehabTF.addActionListener(this);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);

}

public void actionPerformedGet(ActionEvent g)
{
    totalDays = Integer.parseInt(hospitalStayTF.getText());
    totalMedication = Integer.parseInt(medicationTF.getText());
    totalSurgical = Integer.parseInt(surgicalFeesTF.getText());
    totalLab = Integer.parseInt(labFeesTF.getText());
    totalRehab = Integer.parseInt(rehabTF.getText());
}

public int CalcStayCharges()
{
    int dailyCharge = 350;

    totalStayCharge = totalDays * dailyCharge;

    return totalStayCharge;
}

public int CalcMiscCharges()
{
    totalMisc = (totalMedication + totalSurgical + totalLab + totalRehab);

    return totalMisc;
}

public int CalcTotalCharges()
{
    totalCharges = (totalStayCharge + totalMisc);

    return totalCharges;
}

public void actionPerformed(ActionEvent e)
{
    if (e.getActionCommand().equals("Calculate"))
    {
        totalChargesTA.setText(String.valueOf(totalCharges));
    }
    else if (e.getActionCommand().equals("Exit"))
        System.exit(0);
}

public static void main(String[] args) 
{
    HospitalChargesCalculator hospCalc = new HospitalChargesCalculator();
}
}

2 ответа

Решение

Я пока не могу комментировать, поэтому здесь как ответ.

Как уже говорилось, вы на самом деле не вызываете функцию для расчета ваших общих расходов с totalChargesTA.setText(String.valueOf(totalCharges)); но вместо этого попробуйте напрямую получить доступ к переменной totalCharges вашего метода CalcTotalCharges() (метод, который вы должны вызывать здесь), это возможно только потому, что вы объявили все свои переменные как static int так что вы можете получить к ним доступ даже в тех частях вашего кода, где вы на самом деле не хотите получать к ним доступ.

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

Также не объявляйте все свои переменные, которые вы собираетесь использовать только в одной функции вашего класса, не объявляйте их в этой функции, чтобы избежать той же ошибки, что и в ваших статических объявлениях.

- Кроме того, кроме ответа Субина Томаса, который показывает основную ошибку в вашем коде, его решение не будет работать, потому что он перепутал некоторые функции, и вы также должны исправить эту функцию:

public int CalcTotalCharges()
{
  totalCharges = (totalStayCharge + totalMisc);

  return totalCharges;
}

Где у вас есть такая же ошибка, чтобы:

public int CalcTotalCharges()
{
  totalCharges = (CalcStayCharges() + CalcMiscCharges());

  return totalCharges;
}

РЕДАКТИРОВАТЬ: На самом деле у вас также есть другая ошибка в способе получения значений из вводимых текстовых полей. Почему вы использовали метод public void actionPerformedGet(ActionEvent g)?

Это не будет работать с вашим ActionListener. Вместо этого скопируйте код этой функции в свой actionPerformed Метод. Тогда это на самом деле будет работать. Для полноты вот рабочий код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HospitalChargesCalculator extends JFrame implements ActionListener{

private JLabel hospitalStayLabel;
private JLabel medicationLabel;
private JLabel surgicalFeesLabel;
private JLabel labFeesLabel;
private JLabel rehabLabel;
private JLabel totalLabel;

private JTextField hospitalStayTF;
private JTextField medicationTF;
private JTextField surgicalFeesTF;
private JTextField labFeesTF;
private JTextField rehabTF;

private JTextArea totalChargesTA;

private JButton calculateB;
private JButton exitB;

public static final int WIDTH = 500;
public static final int HEIGHT = 350;


int totalDays;
int totalMedication;
int totalSurgical;
int totalLab;
int totalRehab;

public HospitalChargesCalculator() {
setTitle("Hospital Charges");
Container c = getContentPane();
setSize(WIDTH, HEIGHT);

c.setLayout(null);

hospitalStayLabel = new JLabel(" Number of days spent in hospital: ",
        SwingConstants.LEFT);
medicationLabel = new JLabel(" Total Medication Charges: ",
        SwingConstants.LEFT);
surgicalFeesLabel = new JLabel(" Total sugical charges : ",
        SwingConstants.LEFT);
labFeesLabel = new JLabel(" Total lab fees: ",
        SwingConstants.LEFT);
rehabLabel = new JLabel(" Total Rehab charges: ",
        SwingConstants.LEFT);
totalLabel = new JLabel(" Total Charges: ",
        SwingConstants.LEFT);

calculateB = new JButton("Calculate");
calculateB.addActionListener(this);
exitB = new JButton("Exit");
exitB.addActionListener(this);


hospitalStayTF = new JTextField();
medicationTF = new JTextField();
surgicalFeesTF = new JTextField();
labFeesTF = new JTextField();
rehabTF = new JTextField();


totalChargesTA = new JTextArea();

hospitalStayLabel.setSize(250, 30);
hospitalStayTF.setSize(200, 30);
medicationLabel.setSize(200, 30);
medicationTF.setSize(200, 30);
surgicalFeesLabel.setSize(200, 30);
surgicalFeesTF.setSize(200, 30);
labFeesLabel.setSize(200, 30);
labFeesTF.setSize(200, 30);
rehabLabel.setSize(200, 30);
rehabTF.setSize(200,30);
totalLabel.setSize(200, 30);
totalChargesTA.setSize(200,30);
calculateB.setSize(100, 30);
exitB.setSize(100, 30);

hospitalStayLabel.setLocation(30, 25);
hospitalStayTF.setLocation(250, 25);
medicationLabel.setLocation(30, 60);
medicationTF.setLocation(250, 60);
surgicalFeesLabel.setLocation(30, 95);
surgicalFeesTF.setLocation(250, 95);
labFeesLabel.setLocation(30, 130);
labFeesTF.setLocation(250, 130);
rehabLabel.setLocation(30, 165);
rehabTF.setLocation(250, 165);
totalLabel.setLocation(30, 250);
totalChargesTA.setLocation(250, 250);
calculateB.setLocation(70, 205);
exitB.setLocation(300, 205);

c.add(hospitalStayLabel);
c.add(hospitalStayTF);
c.add(medicationLabel);
c.add(medicationTF);
c.add(surgicalFeesLabel);
c.add(surgicalFeesTF);
c.add(labFeesLabel);
c.add(labFeesTF);
c.add(rehabLabel);
c.add(rehabTF);
c.add(totalLabel);
c.add(totalChargesTA);
c.add(calculateB);
c.add(exitB);

hospitalStayTF.addActionListener(this);
medicationTF.addActionListener(this);
surgicalFeesTF.addActionListener(this);
labFeesTF.addActionListener(this);
rehabTF.addActionListener(this);

setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

}


public int CalcStayCharges()
{
int dailyCharge = 350;

int totalStayCharge = totalDays * dailyCharge;

return totalStayCharge;
}

public int CalcMiscCharges()
{
int totalMisc = (totalMedication + totalSurgical + totalLab + totalRehab);

return totalMisc;
}

public int CalcTotalCharges()
{
int totalCharges = (CalcStayCharges() + CalcMiscCharges());

return totalCharges;
}

public void actionPerformed(ActionEvent e)
{

totalDays = Integer.parseInt(hospitalStayTF.getText());
totalMedication = Integer.parseInt(medicationTF.getText());
totalSurgical = Integer.parseInt(surgicalFeesTF.getText());
totalLab = Integer.parseInt(labFeesTF.getText());
totalRehab = Integer.parseInt(rehabTF.getText());

if (e.getActionCommand().equals("Calculate"))
{
    totalChargesTA.setText(CalcTotalCharges()+"");
}
else if (e.getActionCommand().equals("Exit"))
    System.exit(0);
}

public static void main(String[] args) 
{
HospitalChargesCalculator hospCalc = new HospitalChargesCalculator();
}
}  

Если вы нажмете кнопку, вы просто выполните actionPerformed(ActionEvent e), который только делает totalChargesTA.setText(String.valueOf(totalCharges));, Чтобы получить значение, вы должны использовать любой из ваших методов расчета перед использованием setText метод.

public void actionPerformed(ActionEvent e)
{
    if (e.getActionCommand().equals("Calculate"))
    {
        totalCharges = CalcTotalCharges();
        totalChargesTA.setText(String.valueOf(totalCharges));
    }
    else if (e.getActionCommand().equals("Exit"))
        System.exit(0);
}

может случиться так, что вам нужно также вызвать некоторые другие методы, если они вычисляют значения, которые используются внутри CalcTotalCharges,

Другие вопросы по тегам