监听事件(计算器)

这篇博客展示了如何在Java中实现事件监听,包括按钮点击、文本框输入和窗口关闭等交互。通过实例代码,解释了如何创建事件监听器,使多个按钮共享一个事件处理方法,以及如何在用户输入后进行响应,例如简易计算器的实现。此外,还讨论了内部类在事件监听中的应用,以优化代码结构。
摘要由CSDN通过智能技术生成

事件监听

事件监听:某个时间发生什么事情

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestAction01 {
    public static void main(String[] args) {
        //两个按钮实现同一个监听
        Frame frame = new Frame("开始停止");
        Button button1 = new Button("start");
        Button button2 = new Button("stop");
        //如果不设定则为默认值
        button2.setActionCommand("buttton2-stop");
        MyMonitor myMonitor = new MyMonitor();
        button1.addActionListener(myMonitor);
        button2.addActionListener(myMonitor);
        frame.add(button1,BorderLayout.NORTH);
        frame.add(button2,BorderLayout.SOUTH);
        frame.setVisible(true);
    }
}
class  MyMonitor implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
        //e.getActioncommand 获得按钮信息
        System.out.println("按钮被点击了:msg"+e.getActionCommand());
        e.getActionCommand();
    }
}

多个按钮共享一个事件

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestAction {
    public static void main(String[] args) {
        Button button = new Button();
        Frame frame = new Frame();
        MyActionListener myActionListener = new MyActionListener();
        button.addActionListener(myActionListener);
        frame.add(button, BorderLayout.CENTER);
        frame.setVisible(true);
        windowClose(frame);

    }

    //关闭窗口窗体
    private static void windowClose(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
     //事件监听
class MyActionListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        System.out.println("aaa");
    }

}

关闭窗口

输入框监听事件

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestAction02 {
    public static void main(String[] args) {
        //启动!
        Myfraem myfraem=new Myfraem();
        windowClose(myfraem);
    }
    private static void windowClose(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

}
class Myfraem extends Frame{
    public Myfraem(){
        Frame frame=new Frame();
        TextField textField=new TextField();
        add(textField);
        //监听这个文本框输入的文字
        MyActionListener2 myActionListener2 = new MyActionListener2();
        //按下enter,触发
        textField.addActionListener(myActionListener2);
        //设置替换编码
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }


}
class MyActionListener2 implements ActionListener{
    public void actionPerformed(ActionEvent e){
        TextField field =(TextField) e.getSource();//获取一些资源
        System.out.println(field.getText());//获得输入框中的资源
        field.setText("");//设置为空
    }
}

简易计算器

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TextAlc {
    public static void main(String[] args) {
        Calculator calculator=new Calculator();
    }
}


//计算器类
class Calculator extends Frame{
    public Calculator(){
        //3个文本框

        TextField num1 = new TextField(10);
        TextField num2 = new TextField(10);
        TextField num3 = new TextField(20);

        //1个按钮
        Button button=new Button("=");
        button.addActionListener(new MyCalulatorListener(num1,num2,num3));
        //一个标签
        Label label = new Label("+");
        //流式布局
        setLayout(new FlowLayout());
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);
        setVisible(true);
        pack();
    }
}

//监听器类
class MyCalulatorListener implements ActionListener{
    //获得三个变量
    private TextField num1,num2,num3;
    public MyCalulatorListener(TextField num1,TextField num2,TextField num3){
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //获得加数和被加数
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        //将这个值+法运算后,放到第三个框
        num3.setText(""+(n1+n2));
        //清楚前两个框
        num1.setText("");
        num2.setText("");
    }
}

优化面向对象

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TextAlc {
    public static void main(String[] args) {
        Calculator calculator=new Calculator();
        calculator.loadFrame();
    }
}


//计算器类
class Calculator extends Frame{
    //属性
    TextField num1,num2,num3;
    public void loadFrame(){
        num1 = new TextField(10);
        num2 = new TextField(10);
        num3 = new TextField(20);
        Button button=new Button("=");
        Label label = new Label("+");
        button.addActionListener(new MyCalulatorListener(this));

        //布局
        setLayout(new FlowLayout());
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);
        setVisible(true);
        pack();
    }
}

//监听器类
class MyCalulatorListener implements ActionListener{
    //获得三个变量
    Calculator calculator = null;
    public MyCalulatorListener(Calculator calculator){
        this.calculator=calculator;

    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //获得加数和被加数
        int n1=Integer.parseInt(calculator.num1.getText());
        int n2=Integer.parseInt(calculator.num2.getText());
        //将这个值+法运算后,放到第三个框
        calculator.num3.setText(""+(n1+n2));
        //清楚前两个框
        calculator.num1.setText("");
        calculator.num2.setText("");
    }
}

内部类

可以畅通无阻的访问外部类的方法和属性

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TextAlc {
    public static void main(String[] args) {
        Calculator calculator=new Calculator();
        calculator.loadFrame();
    }
}


//计算器类
class Calculator extends Frame{
    //属性
    TextField num1,num2,num3;
    public void loadFrame(){
        num1 = new TextField(10);
        num2 = new TextField(10);
        num3 = new TextField(20);
        Button button=new Button("=");
        Label label = new Label("+");
        button.addActionListener(new MyCalulatorListener());

        //布局
        setLayout(new FlowLayout());
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);
        setVisible(true);
        pack();
    }
    private class MyCalulatorListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            //获得加数和被加数
            int n1=Integer.parseInt(num1.getText());
            int n2=Integer.parseInt(num2.getText());
            //将这个值+法运算后,放到第三个框
            num3.setText(""+(n1+n2));
            //清楚前两个框
            num1.setText("");
            num2.setText("");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值