/* I am trying to make a basic calculator in JAVA using swings. However, after adding
* actionlisteners to each of my buttons, the actionPerformed method is never called. I can't
*seem to figure out why .
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class calculator extends JApplet implements ActionListener
{
JLabel num1_label,num2_label,result_label;
JTextField t1,t2,t3;
JButton sum,sub,mul,div;
float num1,num2,res;
public calculator ()
{
Container contentPanel = getContentPane();
contentPanel.setLayout(new GridLayout(6,2));
JLabel num1_label = new JLabel("Number 1");
contentPanel.add(num1_label);
JTextField t1 = new JTextField(10);
contentPanel.add(t1);
JLabel num2_label = new JLabel("Number 2");
contentPanel.add(num2_label);
JTextField t2 = new JTextField(10);
contentPanel.add(t2);
JLabel result_label = new JLabel("Result");
contentPanel.add(result_label);
JTextField t3 = new JTextField(10);
contentPanel.add(t3);
JButton sum = new JButton("Add");
sum.addActionListener(this);
contentPanel.add(sum);
JButton sub = new JButton("Subtract");
sub.addActionListener(this);
contentPanel.add(sub);
JButton mul = new JButton("Multiply");
mul.addActionListener(this);
contentPanel.add(mul);
JButton div = new JButton("Divide");
div.addActionListener(this);
contentPanel.add(div);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == sum)
{
addition();
}
if(ae.getSource() == sub)
{
subtraction();
}
if(ae.getSource() == mul)
{
multiplication();
}
if(ae.getSource() == div)
{
division();
}
}
public void addition()
{
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 + num2;
t3.setText(" " + res);
}
catch (NumberFormatException nfe)
{
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void subtraction()
{
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 - num2;
t3.setText(" " + res);
}
catch (NumberFormatException nfe)
{
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void multiplication()
{
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 * num2;
t3.setText(" " + res);
}
catch (NumberFormatException nfe)
{
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void division()
{
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 / num2;
t3.setText(" " + res);
}
catch (NumberFormatException nfe)
{
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public static void main(String argsp[])
{
calculator c = new calculator();
}
}
问问题
6185 次
2 回答
5
You first declare the buttons as member variables and then you use (declare again and initialize) the same variable names inside the constructor. This means that the member variables remain all equal to null
. To fix this, just drop the leading JButton
from the buttons initialization in the constructor.
JButton mul = new JButton("Multiply");
becomes
mul = new JButton("Multiply");
The issue related to variable names that you had here is known as shadowing.
And the full solution. Please note the changes to the class name, the variable declaration, formatting,....
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Calculator extends JApplet implements ActionListener {
private JLabel num1_label;
private JLabel num2_label;
private JLabel result_label;
private JTextField t1;
private JTextField t2;
private JTextField t3;
private JButton sum;
private JButton sub;
private JButton mul;
private JButton div;
private float num1;
private float num2;
private float res;
public Calculator() {
Container contentPanel = getContentPane();
contentPanel.setLayout(new GridLayout(6, 2));
num1_label = new JLabel("Number 1");
contentPanel.add(num1_label);
t1 = new JTextField(10);
contentPanel.add(t1);
num2_label = new JLabel("Number 2");
contentPanel.add(num2_label);
t2 = new JTextField(10);
contentPanel.add(t2);
result_label = new JLabel("Result");
contentPanel.add(result_label);
t3 = new JTextField(10);
contentPanel.add(t3);
sum = new JButton("Add");
sum.addActionListener(this);
contentPanel.add(sum);
sub = new JButton("Subtract");
sub.addActionListener(this);
contentPanel.add(sub);
mul = new JButton("Multiply");
mul.addActionListener(this);
contentPanel.add(mul);
div = new JButton("Divide");
div.addActionListener(this);
contentPanel.add(div);
}
public void actionPerformed(ActionEvent ae) {
System.out.println("hhhhh");
if (ae.getSource() == sum) {
addition();
}
if (ae.getSource() == sub) {
subtraction();
}
if (ae.getSource() == mul) {
multiplication();
}
if (ae.getSource() == div) {
division();
}
}
public void addition() {
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 + num2;
t3.setText(" " + res);
} catch (NumberFormatException nfe) {
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void subtraction() {
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 - num2;
t3.setText(" " + res);
} catch (NumberFormatException nfe) {
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void multiplication() {
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 * num2;
t3.setText(" " + res);
} catch (NumberFormatException nfe) {
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public void division() {
try {
num1 = Float.parseFloat(t1.getText());
num2 = Float.parseFloat(t2.getText());
res = num1 / num2;
t3.setText(" " + res);
} catch (NumberFormatException nfe) {
t1.setText("0");
t2.setText("0");
t3.setText("0");
}
}
public static void main(String argsp[]) {
Calculator c = new Calculator();
}
}
于 2012-09-19T20:17:23.843 回答
1
在你的构造函数中试试这个:
sum.setActionCommand ("sum");
并在您的 actionPerformed 中询问:
if ( ae.getActionCommand().equals("sum")) {
...
}
你所有的按钮都一样。
于 2012-09-19T20:14:00.423 回答