Untitled
unknown
plain_text
a year ago
7.9 kB
13
Indexable
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalDate;
import java.util.LinkedList;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
// Class representing health data
class HealthData {
String date;
int steps;
int waterIntake;
int sleepHours;
int meals;
public HealthData(String date, int steps, int waterIntake, int sleepHours, int meals) {
this.date = date;
this.steps = steps;
this.waterIntake = waterIntake;
this.sleepHours = sleepHours;
this.meals = meals;
}
public String[] toArray() {
return new String[] {date, String.valueOf(steps), String.valueOf(waterIntake),
String.valueOf(sleepHours), String.valueOf(meals)};
}
}
public class HealthTrackerGUI extends JFrame {
LinkedList<HealthData> healthList = new LinkedList<>();
DefaultTableModel model;
public HealthTrackerGUI() {
setTitle("Health Tracker");
setSize(1366, 768);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// Layout and Components
setLayout(new BorderLayout());
// Panel for input fields
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(5, 2));
// Input fields
JLabel dateLabel = new JLabel("Date (YYYY-MM-DD):");
JTextField dateField = new JTextField();
dateField.setText(LocalDate.now().toString());
JLabel stepsLabel = new JLabel("Steps:");
JTextField stepsField = new JTextField();
JLabel waterLabel = new JLabel("Water Intake (ml):");
JTextField waterField = new JTextField();
JLabel sleepLabel = new JLabel("Sleep (hours):");
JTextField sleepField = new JTextField();
JLabel mealsLabel = new JLabel("Meals:");
JTextField mealsField = new JTextField();
inputPanel.add(dateLabel);
inputPanel.add(dateField);
inputPanel.add(stepsLabel);
inputPanel.add(stepsField);
inputPanel.add(waterLabel);
inputPanel.add(waterField);
inputPanel.add(sleepLabel);
inputPanel.add(sleepField);
inputPanel.add(mealsLabel);
inputPanel.add(mealsField);
// Add input panel to the top of the frame
add(inputPanel, BorderLayout.NORTH);
// Table to display health records
String[] columns = {"Date", "Steps", "Water Intake (ml)", "Sleep (hours)", "Meals"};
model = new DefaultTableModel(columns, 0);
JTable table = new JTable(model);
JScrollPane tablePane = new JScrollPane(table);
add(tablePane, BorderLayout.CENTER);
// Buttons for actions
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("Add Record");
JButton editButton = new JButton("Edit Record");
JButton deleteButton = new JButton("Delete Record");
JButton avgStepsButton = new JButton("Average Steps");
JButton avgWaterButton = new JButton("Average Water Intake");
buttonPanel.add(addButton);
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
buttonPanel.add(avgStepsButton);
buttonPanel.add(avgWaterButton);
add(buttonPanel, BorderLayout.SOUTH);
// Event Listeners for buttons
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String date = dateField.getText();
int steps = Integer.parseInt(stepsField.getText());
int waterIntake = Integer.parseInt(waterField.getText());
int sleepHours = Integer.parseInt(sleepField.getText());
int meals = Integer.parseInt(mealsField.getText());
HealthData newData = new HealthData(date, steps, waterIntake, sleepHours, meals);
healthList.add(newData);
model.addRow(newData.toArray());
clearFields();
}
});
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();
if (selectedRow >= 0) {
HealthData data = healthList.get(selectedRow);
data.steps = Integer.parseInt(stepsField.getText());
data.waterIntake = Integer.parseInt(waterField.getText());
data.sleepHours = Integer.parseInt(sleepField.getText());
data.meals = Integer.parseInt(mealsField.getText());
model.setValueAt(data.steps, selectedRow, 1);
model.setValueAt(data.waterIntake, selectedRow, 2);
model.setValueAt(data.sleepHours, selectedRow, 3);
model.setValueAt(data.meals, selectedRow, 4);
clearFields();
} else {
JOptionPane.showMessageDialog(null, "Please select a row to edit.");
}
}
});
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int selectedRow = table.getSelectedRow();
if (selectedRow >= 0) {
healthList.remove(selectedRow);
model.removeRow(selectedRow);
} else {
JOptionPane.showMessageDialog(null, "Please select a row to delete.");
}
}
});
avgStepsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (healthList.isEmpty()) {
JOptionPane.showMessageDialog(null, "No records to calculate.");
} else {
int totalSteps = 0;
for (HealthData data : healthList) {
totalSteps += data.steps;
}
JOptionPane.showMessageDialog(null, "Average Steps: " + totalSteps / healthList.size());
}
}
});
avgWaterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (healthList.isEmpty()) {
JOptionPane.showMessageDialog(null, "No records to calculate.");
} else {
int totalWater = 0;
for (HealthData data : healthList) {
totalWater += data.waterIntake;
}
JOptionPane.showMessageDialog(null, "Average Water Intake (ml): " + totalWater / healthList.size());
}
}
});
}
// Method to clear the input fields after an action
private void clearFields() {
for (Component c : getContentPane().getComponents()) {
if (c instanceof JPanel) {
for (Component field : ((JPanel) c).getComponents()) {
if (field instanceof JTextField) {
((JTextField) field).setText("");
}
}
}
}
}
public static void main(String[] args) {
HealthTrackerGUI gui = new HealthTrackerGUI();
gui.setVisible(true);
}
}
Editor is loading...
Leave a Comment