After I put the do while loop after calculating grades, the dialog will show but after I hit yes it will keep on showing same for the other when you still did not enter all the blank space provided. Another thing how will I put the clearInput variable so that the space will be black after I hit yes button
import javax.print.DocFlavor.READER;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
public class finals extends JFrame {
private JTextField[] txtScores;
private JButton btnCalculate;
private JLabel lblResult;
private JTable tblGrades;
public finals() {
setTitle("Grade Calculator");
setSize(600, 330);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(0, 2));
txtScores = new JTextField[7]; // Assuming 7 subjects
for (int i = 0; i < txtScores.length; i++) {
inputPanel.add(new JLabel("Enter score for Subject " + (i + 1) + ":"));
txtScores[i] = new JTextField(10);
txtScores[i].setHorizontalAlignment(JTextField.LEFT);
inputPanel.add(txtScores[i]);
}
add(inputPanel, BorderLayout.NORTH);
btnCalculate = new JButton("Calculate Grades");
lblResult = new JLabel();
add(btnCalculate, BorderLayout.CENTER);
add(lblResult, BorderLayout.SOUTH);
btnCalculate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int userInput;
do{
calculateGrades();
userInput = JOptionPane.showConfirmDialog(null, "Do you want to calculate again?", "Calculate Again", JOptionPane.YES_NO_OPTION);
}while(userInput == JOptionPane.YES_OPTION);
}
});
tblGrades = new JTable();
JScrollPane scrollPane = new JScrollPane(tblGrades);
add(scrollPane, BorderLayout.EAST);
}
private void calculateGrades() {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Subject");
model.addColumn("Score");
String[] grades = new String[txtScores.length];
int totalScore = 0;
for (int i = 0; i < txtScores.length; i++) {
int score;
try {
score = Integer.parseInt(txtScores[i].getText());
totalScore += score;
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "Invalid input for Subject " + (i + 1) + "! Please enter a valid number.");
return;
}
String grade;
if (score >= 98 && score <= 100) {
grade = "Highest Honor";
} else if (score >= 95 && score < 98) {
grade = "High Honor";
} else if (score >= 90 && score < 95) {
grade = "Honor";
} else {
grade = "None";
}
grades[i] = grade;
model.addRow(new Object[]{"Subject " + (i + 1), score, grade});
}
double averageScore = (double) totalScore / txtScores.length;
String averageGrade;
if (averageScore >= 98 && averageScore <= 100) {
averageGrade = "Highest Honor";
} else if (averageScore >= 95 && averageScore < 98) {
averageGrade = "High Honor";
} else if (averageScore >= 90 && averageScore < 95) {
averageGrade = "Honor";
} else {
averageGrade = "None";
}
lblResult.setText("Total Average: " + String.format("%.2f", averageScore) + " = " + averageGrade);
tblGrades.setModel(model);
}
private void clearInputs(){
for (int i = tblGrades.getRowCount() - 1; i>= 0; i--){
((DefaultTableModel) tblGrades.getModel()).removeRow(i);
}
lblResult.setText("");
for (JTextField textField: txtScores){
textField.setText("");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new finals().setVisible(true);
}
});
}
}
Rather than a do-while
loop, simply use an if
statement.
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
public class finals extends JFrame {
private JTextField[] txtScores;
private JButton btnCalculate;
private JLabel lblResult;
private JTable tblGrades;
public finals() {
setTitle("Grade Calculator");
setSize(600, 330);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(0, 2));
txtScores = new JTextField[7]; // Assuming 7 subjects
for (int i = 0; i < txtScores.length; i++) {
inputPanel.add(new JLabel("Enter score for Subject " + (i + 1) + ":"));
txtScores[i] = new JTextField(10);
txtScores[i].setHorizontalAlignment(JTextField.LEFT);
inputPanel.add(txtScores[i]);
}
add(inputPanel, BorderLayout.NORTH);
btnCalculate = new JButton("Calculate Grades");
lblResult = new JLabel();
add(btnCalculate, BorderLayout.CENTER);
add(lblResult, BorderLayout.SOUTH);
btnCalculate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int userInput;
calculateGrades();
userInput = JOptionPane.showConfirmDialog(null,
"Do you want to calculate again?", "Calculate Again",
JOptionPane.YES_NO_OPTION);
if (userInput == JOptionPane.YES_OPTION) {
clearInputs();
}
else {
System.exit(0);
}
}
});
tblGrades = new JTable();
JScrollPane scrollPane = new JScrollPane(tblGrades);
add(scrollPane, BorderLayout.EAST);
}
private void calculateGrades() {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Subject");
model.addColumn("Score");
String[] grades = new String[txtScores.length];
int totalScore = 0;
for (int i = 0; i < txtScores.length; i++) {
int score;
try {
score = Integer.parseInt(txtScores[i].getText());
totalScore += score;
}
catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this,
"Invalid input for Subject " + (i + 1) + "! Please enter a valid number.");
return;
}
String grade;
if (score >= 98 && score <= 100) {
grade = "Highest Honor";
}
else if (score >= 95 && score < 98) {
grade = "High Honor";
}
else if (score >= 90 && score < 95) {
grade = "Honor";
}
else {
grade = "None";
}
grades[i] = grade;
model.addRow(new Object[]{"Subject " + (i + 1), score, grade});
}
double averageScore = (double) totalScore / txtScores.length;
String averageGrade;
if (averageScore >= 98 && averageScore <= 100) {
averageGrade = "Highest Honor";
}
else if (averageScore >= 95 && averageScore < 98) {
averageGrade = "High Honor";
}
else if (averageScore >= 90 && averageScore < 95) {
averageGrade = "Honor";
}
else {
averageGrade = "None";
}
lblResult.setText(
"Total Average: " + String.format("%.2f", averageScore) + " = " + averageGrade);
tblGrades.setModel(model);
}
private void clearInputs() {
for (int i = tblGrades.getRowCount() - 1; i >= 0; i--) {
((DefaultTableModel) tblGrades.getModel()).removeRow(i);
}
lblResult.setText("");
for (JTextField textField : txtScores) {
textField.setText("");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new finals().setVisible(true);
}
});
}
}
The user enters the scores. Then he presses Calculate Grades button. Then the JOptionPane
is displayed. If the user select "Yes", the entered grades are removed and the user can enter a new set of grades and again press the Calculate Grades button. If the user selects "No", the program terminates.