В вашем CalculateButtonHandler
классе вы используете JLabel
для получения ввода, похоже, вам нужен JTextField для получения ввода, измените этот класс на этот:
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");
}
}
}
И со следующего раза всегда планируйте JOB для потока диспетчера событий, при этом используя Swing, как в вашем случае ваш основной метод должен выглядеть следующим образом:
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's Longest Side: ", SwingConstants.CENTER);
side2 = new JLabel ("Triangle's Next Side: ", SwingConstants.CENTER);
side3 = new JLabel ("Triangle's 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();
}
});
}
}
Чтобы узнать больше о том, о чем я говорю, прочитайте Параллельность в Swing . В этой главе есть очень важная вещь о Swing.