簡體   English   中英

Java中的ActionListener

[英]ActionListener in Java

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

}

首先,將按鈕聲明為成員變量,然后在構造函數中使用(再次聲明並初始化)相同的變量名。 這意味着成員變量保持全部等於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();
    }

}

在構造函數中嘗試以下操作:

sum.setActionCommand ("sum");

並在您執行的動作中詢問:

if ( ae.getActionCommand().equals("sum")) {
    ...
}

所有按鈕都一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM