1
/* 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();
        }

}
4

2 に答える 2

5

最初にボタンをメンバー変数として宣言してから、コンストラクター内で同じ変数名を使用します(再度宣言して初期化します)。これは、メンバー変数がすべてに等しいままであることを意味しnullます。これを修正するJButtonには、コンストラクターのボタンの初期化から先頭を削除するだけです。

JButton mul = new JButton("Multiply");

になります

mul = new JButton("Multiply");

ここで発生した変数名に関連する問題は、シャドウイングとして知られています。

そして完全な解決策。クラス名、変数宣言、フォーマットなどの変更に注意してください。

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 に答える