In your CalculateButtonHandler class that you use JLabel to input, it seems like you need a JTextField to get the input for this, change this class to this:
private class CalculateButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { double num1, num2, num3; num1 = Double.parseDouble(input1.getText()); num2 = Double.parseDouble(input2.getText()); num3 = Double.parseDouble(input3.getText()); if ((num1*num1) == ((num2*num2)+(num3*num3))) { result.setText("YES"); } else { result.setText("NO"); } } }
And from next time, always plan the JOB for the Event Manager thread using Swing, as in your case your main method should look like this:
import javax.swing.*; import java.awt.*; import java.awt.event.*; // some kind of problem with Calculate button handler (LINE 78 public class Program5 extends JFrame { // Setting up for the program private JLabel side1, side2, side3, str, result; private JButton calculate, endProgram; private JTextField input1, input2, input3; private CalculateButtonHandler calcHandler; private EndProgramButtonHandler endHandler; private Container pane; private static final int WIDTH = 500; private static final int HEIGHT = 350; // constructor public Program5() { // create labels side1 = new JLabel ("Triangle Longest Side: ", SwingConstants.CENTER); side2 = new JLabel ("Triangle Next Side: ", SwingConstants.CENTER); side3 = new JLabel ("Triangle Last Side: ", SwingConstants.CENTER); result = new JLabel ("", SwingConstants.CENTER); str = new JLabel ("Is the Triangle a right Triangle?",SwingConstants.CENTER); // create text fields input1 = new JTextField ("",60); input1.setHorizontalAlignment(JTextField.CENTER); input2 = new JTextField ("",60); input2.setHorizontalAlignment(JTextField.CENTER); input3 = new JTextField ("",60); input3.setHorizontalAlignment(JTextField.CENTER); // create buttons calculate = new JButton ("Calculate"); calcHandler = new CalculateButtonHandler (); calculate.addActionListener(calcHandler); endProgram = new JButton ("Exit"); endHandler = new EndProgramButtonHandler(); endProgram.addActionListener(endHandler); // Set title of Window setTitle ("Right Triangle Tester"); //Get Container pane = getContentPane(); // set Layout pane.setLayout (new GridLayout (5,2)); // place the components in the pane pane.add(side1); pane.add(input1); pane.add(side2); pane.add(input2); pane.add(side3); pane.add(input3); pane.add(str); pane.add(result); pane.add(calculate); pane.add(endProgram); // set size of the window and display it setSize (WIDTH, HEIGHT); se1tVisible (true); setDefaultCloseOperation (EXIT_ON_CLOSE); } private class CalculateButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { double num1, num2, num3; num1 = Double.parseDouble(input1.getText()); num2 = Double.parseDouble(input2.getText()); num3 = Double.parseDouble(input3.getText()); if ((num1*num1) == ((num2*num2)+(num3*num3))) { result.setText("YES"); } else { result.setText("NO"); } } } private class EndProgramButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { System.exit(0); } } public static void main(String[] args) { // Here this is used to attain Concurrency in Swing. // So that if there is a need to update the GUI, // that can be done without any difficulty or freezing the GUI. SwingUtilities.invokeLater(new Runnable() { public void run() { Program5 myObject = new Program5(); } }); } }
To learn more about what I'm saying, read Concurrency in Swing . A very important thing about swing in this chapter.
source share