Error reading GUI JTextField

I can’t understand where I’m wrong, I tried to change a few things, but I just can’t get “CalculateButtonHandler to work correctly”. Sorry, I posted all this code, but the last time I wasn't specific enough: S If someone could point me in the right direction, that would be great. Thanks.

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); setVisible (true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private class CalculateButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { double num1, num2, num3; num1 = Double.parseDouble(side1.getText()); num2 = Double.parseDouble(side2.getText()); num3 = Double.parseDouble(side3.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) { Program5 myObject = new Program5(); } } 
+4
source share
4 answers

You are parsing sideX text, which is JLabels, not your JTextFields. Replace sideX with inputX in CalculateButtonHandler and everything will be fine

+2
source

1) use JFormattedTextField (witt Number instance ), and not just JTextField , you could never decide to parse the Number instance of an instance from String ,

2) looks like this code parses text from JLabels instead of JTextFields

+2
source

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.

+2
source

You also directly compare paired. It is very unlikely that you will compare this comparison. Run this:

 double num1,num2,num3; num1=2.8284271247461903; //== Math.sqrt(8) num2=2.0; num3=2.0; if ((num1*num1) == ((num2*num2)+(num3*num3))) System.out.println ("yes"); else System.out.println ("no " + num1*num1 + " " + (num2*num2 + num3*num3)); 

}

+1
source

Source: https://habr.com/ru/post/1396190/


All Articles