按钮和文本框事件监听

2023-09-18 13:52:45
  • 事件监听:当某个事情发生的时候,干什么

一、按钮Button监听

public class TestActionEvent {
    public static void main(String[] args) {
        //按下按钮,触发一些事件
        Frame frame = new Frame();
        //弹窗的监听事件
       /* frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
               System.exit(0);
            }
        });*/
        Button button = new Button();
        //按钮的监听事件
        //因为addActionListener 需要一个ActionListener,所以我们需要构造一个ActionListener
        /*button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
​
            }
        });*/
        MyActionListener myActionListener = new MyActionListener();
        button.addActionListener(myActionListener);
        frame.add(button,BorderLayout.CENTER);
        frame.pack();
        windowsClose(frame);//关闭窗口
        frame.setVisible(true);
​
​
​
​
    }
​
    //关闭窗体的事件
    private static void windowsClose(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
​
​
}
​
//事件监听
class MyActionListener implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaa");
    }
}
  • 多个按钮监听一个事件

public class TestActionTwo {
    public static void main(String[] args) {
        Frame frame = new Frame();
        //两个按钮,实现同一个监听
        //开始    停止
        Button start = new Button("start");
        Button stop = new Button("stop");
​
        //可以显示的定义出发会返回的命令,如果不显示定义,则会走默认的值!
        //可以多个按钮只写一个监听类
        stop.setActionCommand("button2-stop");
​
        MyMonitor myMonitor = new MyMonitor();
        start.addActionListener(myMonitor);
        stop.addActionListener(myMonitor);
        frame.add(start,BorderLayout.NORTH);
        frame.add(stop,BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.pack();
​
​
    }
}
​
​
class MyMonitor implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //e.getActionCommand();获取按钮的信息
        System.out.println("msg  =>"+ e.getActionCommand());
    }
}

二、输入框TextField监听

public class TestText01 {
    public static void main(String[] args) {
        //启动
        new MyFrame();
    }
}
​
class MyFrame extends Frame{
    public MyFrame(){
        TextField textField = new TextField();
        add(textField);
​
        //监听这个文本框输入的文字
        MyActionListener myActionListener = new MyActionListener();
        //按下enter就会触发这个输入框的监听事件
        textField.addActionListener(myActionListener);
        //设置替换编码
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }
}
​
class MyActionListener2 implements ActionListener{
​
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField source = (TextField)e.getSource();//获得一些资源,返回到一个对象
        System.out.println(source.getText()); //获得输入框的文本
        source.setText("");
    }
}

OOP原则:组合大于继承


三、计算机小Demo

public class TestCalc {
    public static void main(String[] args) {
        new Calculator();
    }
}
​
​
//计算器类
class Calculator extends Frame{
     public Calculator(){
         //3个文本框
         TextField textField1 = new TextField(10);//字符数
         TextField textField2 = new TextField(10);//字符数
         TextField textField3 = new TextField(10);//字符数
​
         //1个按钮
         Button button = new Button("=");
         button.addActionListener(new MyCalculatorListener(textField1,textField2,textField3));
         //1个标签
         Label label = new Label("+");
​
         //布局
         setLayout(new FlowLayout());
         add(textField1);
         add(label);
         add(textField2);
         add(button);
         add(textField3);
​
         pack();
         setVisible(true);
     }
}
​
//监听器类
class MyCalculatorListener implements ActionListener{
    //获取三个变量
    public TextField num1,num2,num3;
    public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
        this.num1=num1;
        this.num2=num2;
        this.num3=num3;
    }
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //1.获得加数和被加数
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        //2.将这个值 + 法运算后放到第三个框
        num3.setText(n1+n2+"");
        //3.清除前两个框
        num1.setText("");
        num2.setText("");
    }
}
  • 改造:

//简易计算器
public class TestCalc {
    public static void main(String[] args) {
        new Calculator().loadFrame();
    }
}
​
​
//计算器类
class Calculator extends Frame{
    //获取三个变量
    public TextField num1,num2,num3;
    public void loadFrame(){
            //3个文本框
             num1 = new TextField(10);//字符数
             num2 = new TextField(10);//字符数
             num3 = new TextField(10);//字符数
​
            //1个按钮
            Button button = new Button("=");
            button.addActionListener(new MyCalculatorListener(this));
            //1个标签
            Label label = new Label("+");
​
            //布局
            setLayout(new FlowLayout());
            add(num1);
            add(label);
            add(num2);
            add(button);
            add(num3);
​
            pack();
            setVisible(true);
​
     }
}
​
//监听器类
class MyCalculatorListener implements ActionListener{
    Calculator calculator=null;
​
    public MyCalculatorListener(Calculator calculator){
      this.calculator =calculator;
    }
​
    @Override
    public void actionPerformed(ActionEvent e) {
        //1.获得加数和被加数
        int n1 = Integer.parseInt(calculator.num1.getText());
        int n2 = Integer.parseInt(calculator.num2.getText());
        //2.将这个值 + 法运算后放到第三个框
        calculator.num3.setText(n1+n2+"");
        //3.清除前两个框
        calculator.num1.setText("");
        calculator.num2.setText("");
    }
}
更多推荐

jupyter notebook插件安装及插件推荐

安装插件安装插件选择的工具栏pipinstalljupyter_contrib_nbextensions将插件工具栏添加到jupyternotebook页面jupytercontribnbextensioninstalldisableconfigurationfornbextensionswithoutexplicit

[python 刷题] 128 Longest Consecutive Sequence

[python刷题]128LongestConsecutiveSequence题目:Givenanunsortedarrayofintegersnums,returnthelengthofthelongestconsecutiveelementssequence.Youmustwriteanalgorithmthatr

MOS管的二级效应及其对伏安特性的影响

前言相信MOS管的理想伏安特性相信各位都在模拟电路中学过,但实际上,该理想图仅是实际图的一个近似,忽略几乎所以的二级效应。因此,为了深入理解非理想的MOS的伏安特性,了解最重要的几个二级效应是很有必要的。本文主要涉及各个参数之间的影响关系,并不涉及具体公式计算,仅做了解。速度饱和与迁移率降低效应载流子的漂移速率以及因此

Blazor前后端框架Known-V1.2.15

V1.2.15Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。Gitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor实现的快速开发框架,前后端分离,开

SpringMVC异常处理

1概述SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。2@ExceptionHandler注解和用@ControllerAdvice注解2.1@ExceptionHandler注解使用注解@ExceptionHandler可以将一个方法指定为异常处理方法。该注解只有一个可选

C#__使用流读取和写入数据的简单用法

使用流处理数据的优势:可以一次性搬运数据量大的文件,把数据当做水,一点一点搬运。数据的传输方向:从外部源传输到程序(读取流);从程序传输到外部源(读入流)外部源:文件、网络数据、内存区域、命名管道读写内存:System.IO.MemorySystem处理网络数据:System.Net.Sockets.NetworkSt

让Pegasus天马座开发板用上OLED屏

继上篇《让Pegasus天马座开发板吃上STM8S标准库》移植完标准库之后,于是我又想为天马座开发板添加一块屏幕。终于在我的零件箱底下找到了沉入箱底多年的0.96OLED屏幕。屏幕介绍这个是128x64像素的屏幕模块,其使用的SSD1306的驱动IC。而目前该模组,只支持3/4线SPI及I2C通信方式。硬件连接我将天马

centos7如何释放磁盘空间?

centos7磁盘满了,但是找不到大的文件,原因是没有释放磁盘空间小白教程,一看就会,一做就成。1.原因当centos系统下启动多个服务且没有一定的清理机制时(比如日志),系统磁盘空间很容易就被占满,但是有时候删除了文件却发现系统磁盘空间未释放,可能原因是忽略了有应用一直在往其中写数据,直接删除某文件无法释放磁盘空间2

Spring SpEL 表达式语言

一、文本表达式文本表达式支持字符串、数字(正数、实数及十六进制数)、布尔类型及null。其中的字符表达式可使用单引号来表示,形如:'Deniro'。如果表达式中包含单引号或者双引号字符,那么可以使用转义字符\。数字支持负数、小数、科学记数法、八进制数和十六进制数。默认情况下,实数使用Double.parseDouble

IO口电路种类

文章目录参考1.高速振荡电路(时钟IO引脚)2.与GPIO功能共享的低速振荡电路(子时钟IO)3.CMOS滞后输入引脚4.电源输入保护电路5.A/D转换器ref+(AVRH)带保护电路的电源输入端6.CMOS电平输出7.CMOS电平输出,带有模拟输入8.CMOS电平输出,带有模拟输入(上面是滞后,这个是自动)9.没有模

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5,cmake版本:3.27.4gcc版本:11.4.0g++版本:11.4.0在此环境下编译opencv4.5.4正常。1.编译时遇到的问题(1)Builttargetlibprotobufmake:***[Makefile:163:all]错误2make时用s

热文推荐