GUI-图形界面编程-3

实现一个计算器界面

实现如下图示:
在这里插入图片描述
上图需要用到什么组件?
Frame,Button,TextField

分析上面图形实现过程:
1.清空Frame的默认布局模式 borderlayout(f.setlayout(null));
2.设置组件的坐标和大小;
3.向Frame窗体中添加组件;

必须设置每个组件的坐标和大小,如果不设置的话,TextField,和Button两个组件 就不会显示.
设置组件大小和坐标:setBounds(x,y,width,height)

添加组件
TextField 和Button
TextField这个属于一个文本交互的组件. 找到component 下面的TextComponent,这里面有个两个,一个叫TextArea 一个叫TextField,使用TextField。
设置组件坐标大小
设置组件大小和坐标:setBounds(x,y,width,height)
在这里插入图片描述

事件监听程序

在这里插入图片描述
上图需要实现什么目标?
针对上图效果 ,鼠标点击按钮并没有反应, 而目前希望实现什么目标?
点击按钮的时候,把按钮上面的数字显示到文本框
点击按钮没反应,说明什么情况?
对于这个可以理解成程序启动之后,点击按钮,程序会执行一段代码。
具体代码需要实现什么逻辑?
具体的这段代码需要实现的逻辑:
当点击后这个代码应该获取按钮上面的数据—》怎么获取呢?–》查询Button的api看到有getLabel()方法可以获取标签值。
获取值后,应该把这个值显示到上面的文本框中—》怎么显示?–》查询TextField的api看到有setText(String t)方法可以设置文本框的值。

在Java中,已经设置好方法用于获取按钮上面的数字和设置值:
1.在按钮上面获得它的数字;button对象.getLabel();
2.TextField设置值,使用 TextField对象.setText(String t);

事件驱动机制
举例:人被打,感受到痛,为什么感受到来引出事件源,事件,事件监听器。
在这里插入图片描述熟悉了获取按钮上面值方法和设置值方法之后,下面应该怎么做呢?
需要点击按钮的时候,才执行这段代码. 而之前所写的代码,都是直接运行结束。

目前效果不一样,需要怎么办?
这里可以简单理解:点击按钮,它并不能感知到被点击了,然后它没有作出反应。

这个和人对比起来看,人为什么能被感知到被打了. 因为人有一套神经系统,然后经过大脑分析,做出相应的反应。而针对这个组件(按钮),没有这套神经系统,所以需要添加这套神经系统,才能自动感知它被点击了;这块内容涉及到新的内容,需要理解几个概念.
事件源: 发生事件的组件;比如 点击一个按钮,这个按钮就属于事件源。(事件的源头)
事件 : 具体发生了什么事情,比如点击事件或者打人事件;
事件监听器:负责监听事件源发出的事件,可以理解成类似于人的神经系统,能够自动感知,然后做出相应的反应。

事件监听器作用:
第一个:监听到事件
第二个:对事件作出反应

结合事例,所以应该给按钮添加一个事件监听器,添加完之后,一点击按钮,对应的事件监听器能够自动感知被点击,然后作出反应。

比如下面的事例:
示例1:在洋洋被人打事件中,事件源,事件,事件监听器分别是什么?
事件源: 洋洋
事件:打人事件
事件监听器: 监听,做出反应:神经系统监听,哭

示例2:源码时代 发生 打架事件;
事件源:源码时代
事件:打架事件
事件监听器: 保安哥哥、姐姐
能 力:阻止打架

添加事件监听器

  • 添加事件监听器方法
    现在我们就要处理事件监听器的问题。针对上面打人事件,监听器是人的神经系统,也就是说这个监听器在事件源上。所以我们上面一个点击Button的事件中,事件源是Button,我们就应该在事件源Button上添加或者注册事件监听器。
    Button按钮
    添加监听器方法
    b.addActionListener(ActionListener l);

  • 理解ActionListener(重点)
    ActionListener 是类还是接口?
    如果是类,那们的实现代码写在哪里呢?修改源码?(好像不太好);
    如果是接口,那我们的代码又写在哪里呢?接口方法是可以被实现的,java自身的实现和我们自定义的实现,这是处理我们自己的逻辑,每个人的逻辑都可能不相同,所以应该采用自定义的实现,这个感觉才靠谱。
    所以不管还是接口,它里面至少有一个方法, 因为它能够自动感知到发生了什么事情之 后,然后作出反应,调用自己的方法。
    监听器里面方法应该作出什么反应?
    方法里面应该实现用户功能需求的代码;
    总结:ActionListener方法里面做什么事情其实并没有多大的意义,而只需要它这种格式;通过覆写 Actionlistener 当中的方法,实现每个用户的具体功能。
    在ActionListener对应的方法中,用户有可能让他打印,有可能让它显示。不同的用户,需求不一样。就像object里的equals方法一样。
    ActionPerformed 这个方法的描述是发生操作的时候调用,一旦感知到事件发生,就会自动调用。

  • 代码实现分析
    怎么实现点击按钮之后,显示在屏幕上?
    创建一个类实现ActionListener 接口;
    在类中覆写ActionListener里面的actionPerformed方法;
    再把实现类对象传回button ,与button组件进行关联.

  • 简单功能实现
    实现简单功能:点击”按钮1”,程序后台打印“我被点击了…”

计算功能实现

  • 分析实现过程
    目的:给组件添加事件监听器,然后一点击按钮,执行一段代码;
    通过 b.addActionListener(ActionListener l)方法给组件button添加监听器;
    ActionListener监听器方法需要实现目标:
    1:获得按钮上面的值
    2:把值显示在TextField组件上面
    在ActionListener监听器方法中,怎么获得按钮上面的数字?
    如果要获得按钮上面的内容,首先需要获得按钮对象的地址,可以通过构造方法把按钮对象传到事件监听器具体实现类里面.

  • 获取按钮上值
    获取按钮值方法:String s = b1.getLabel();

  • 设置显示值
    设置值方法:tf.setText(s);
    在这里插入图片描述
    实现步骤
    ①组合布局:同时使用多个布局方式==》边框布局和网格布局
    Panel:一个简单的容器
    ②:简易计算器–》思路分析:
    事件源:发生事件的源头、对象
    事件:具体发生的事情
    事件监听器:listener:监听事件,做出反应。
    ③:功能的实现:
    给Button对象添加一个事件监听器:
    addActionListener(ActionListener al);//ActionListener是一个接口
    自定义一个类实现ActionListener接口:
    public class MyActionListener implements ActionListener
    复写方法:
    @Override
    public void actionPerformed(ActionEvent e) {}
    类与类之间的参数传递:
    使用构造函数初始化值。
    事件监听器做出具体的反应:
    获取Button的值
    设置给tf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值