debugjavaMinor
Simple Operations Calculator
Viewed 0 times
simpleoperationscalculator
Problem
I'm practicing Swing effects. Everything works but for some reason I get a ton of error messages in the command prompt when the fields are empty, despite my attempt to add some exception handling (this has made me realize I need to practice that a lot more).
```
/* Author: Luigi Vincent
Practicing Java Swing button and button events; Window that does simple calculation on two numbers
TO DO: Figure out why command prompt show so many messages when fields are empty & stop it
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class SimpleCalc extends JFrame {
SimpleCalc (String name) {
super(name);
setLayout(new FlowLayout());
// Fields for input and output
JTextField result = new JTextField(10);
JTextField num1 = new JTextField(5);
JTextField num2 = new JTextField(5);
result.setEditable(false);
// Buttons for operations
JButton b_add = new JButton("Add");
JButton b_sub = new JButton("Subtract");
JButton b_mul = new JButton("Multiply");
JButton b_div = new JButton("Divide");
// Listener to handle operations
ActionListener calculator = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (num1.getText().length() == 0 || num2.getText().length() == 0) {
throw new Exception();
}
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
}
Double alpha = Double.parseDouble(num1.getText());
Double beta = Double.parseDouble(num2.getText());
Double omega = null;
DecimalFormat f = new DecimalFormat("##.00");
if (e.getSource() == b_add) {
om
```
/* Author: Luigi Vincent
Practicing Java Swing button and button events; Window that does simple calculation on two numbers
TO DO: Figure out why command prompt show so many messages when fields are empty & stop it
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class SimpleCalc extends JFrame {
SimpleCalc (String name) {
super(name);
setLayout(new FlowLayout());
// Fields for input and output
JTextField result = new JTextField(10);
JTextField num1 = new JTextField(5);
JTextField num2 = new JTextField(5);
result.setEditable(false);
// Buttons for operations
JButton b_add = new JButton("Add");
JButton b_sub = new JButton("Subtract");
JButton b_mul = new JButton("Multiply");
JButton b_div = new JButton("Divide");
// Listener to handle operations
ActionListener calculator = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (num1.getText().length() == 0 || num2.getText().length() == 0) {
throw new Exception();
}
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
}
Double alpha = Double.parseDouble(num1.getText());
Double beta = Double.parseDouble(num2.getText());
Double omega = null;
DecimalFormat f = new DecimalFormat("##.00");
if (e.getSource() == b_add) {
om
Solution
The major problem I can see is this piece of code :
If you
You should not use
I would not suggested that since now you add a complexity to your code.
-
The method now need to declare
-
-
I guess that this case would happen a lot,so throwing an
The real solution is to only
There is some general notion that are lacking in your code, but I won't cover it all, since I mention it in others answer :
-
There is naming convetions in Java,
-
You should not extend
try {
if (num1.getText().length() == 0 || num2.getText().length() == 0) {
throw new Exception();
}
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
}If you
throw inside a try-catch, you will not exit the function. Since your condition is num1.getText().length() == 0 when you try to do Double.parseDouble(num1.getTest() well your string is empty so this throw an exception. You should not use
throw and catch to manage an error, not in this way. You should first remove the try-catch and work with a simple if :if (num1.getText().isEmpty() || num2.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
throw new Exception();
}I would not suggested that since now you add a complexity to your code.
-
The method now need to declare
throws Exception (which is not possible for actionPerformed()), now the caller need to manage this possible outcome.-
Exception would be too generic.-
I guess that this case would happen a lot,so throwing an
Exception could become heavy for the program.The real solution is to only
return from the method. You've already warned the user that he need to do something (you could be more clear) and you don't want to execute the rest of method.There is some general notion that are lacking in your code, but I won't cover it all, since I mention it in others answer :
-
There is naming convetions in Java,
b_add does not follow it, it should be bAdd (but it could simply be add)-
You should not extend
JFrame, but rather just have a private JFrame, you're not adding any functionnality to JFrame you're only using it. (Composition over inheritance) answer that cover a bit that partCode Snippets
try {
if (num1.getText().length() == 0 || num2.getText().length() == 0) {
throw new Exception();
}
}
catch (Exception ex){
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
}if (num1.getText().isEmpty() || num2.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "Field missing", "Warning", JOptionPane.WARNING_MESSAGE);
throw new Exception();
}Context
StackExchange Code Review Q#56970, answer score: 4
Revisions (0)
No revisions yet.