Java进阶(GUI编程_事件机制①)

来源:互联网 发布:淘宝达人介绍 编辑:程序博客网 时间:2024/05/20 22:38
    前一节中总结了GUI编程的一些基础知识,包括ATW包中的Component和Container两个核心类的知识以及布局管理器的使用,但是我们并没有介绍如何对这些“控件”产生的事件进行监听处理,形象的说我们只学会了架设骨架,还不会往上填肉。接下来继续学习事件监听与处理是如何实现的。

    关于事件监听↓
    
    Java中的事件监听是整个Java消息传递的基础和关键。牵涉到两类对象:事件发生者和事件监听者。事件发生者是事件的起源,它可以是一个按钮,编辑框等。事件监听者就是事件的接受者,在Java中是一个实现了ActionListener接口的类,并且实现actionPerformed这个方法(实现某个接口必须重写接口中提供的方法),这个方法是对操作进行响应时调用的。简单的说就是当你发生某个事件的时候,就会调用到这个方法,这个方法里写的就是对这个事件进行处理的代码。
    Java事件监听机制是监听某个事件是否被激活,这个事件被激活了,就会自动的向监听器传送某种事件对象,监听器接收到事件对象后进行某种处理。
    事件分许多种,都实现了同一个某个事件接口,当你需要捕获某种事件,就new出这样一个指定接口的类,然后通知该监听源。
    小例子:
    
    定义一个监听事件的类,这个类实现了某个事件接口, 实现这个接口就要实现里面的方法,这个方法的参数是当事件被触发时,这些事件信息被封装在这个对象里被传了过来,至于怎么处理这个事件就是这个方法里面的事了。

     此时,若有两个相同的类型的“控件”,并且监听器也是相同的,我们该如何去区分这两个“控件”呢?
    
    关于setActionCommand和getActionCommand:

    其实就是在这个控件对象存一些标签,让我们能区分不同控件。

    AWT包中的TextField类是文本编辑框,小例子:
    
    另外TextField还有一个方法setEchoChar可以设置回显字符。

    经典例题:用三个编辑框实现下面的程序↓
    
    程序思路:
    这个问题域里有些什么对象:一个显示出这个Frame的类,还有一个监听类,监听这个按钮,当按到等号按钮触发事件后应该如何处理。
    
    从Frame类中考虑:
    有三个TextField,第一个Label(标签),如图中的“+”符号,另外还有一个按钮;
    应该采用什么风格?图中为流水线风格,FlowLayout类型;
    需要显示出这个Frame,所以需要setVisible(true);
    需要将这些控件包起来所以需要pack();
    
    从监听类中考虑:当按钮按下时,需要做什么处理?形象的说,就是将前两个TextField的值转换成int类型,加起来再显示在第三个TextField上。
    这个就意味着要我们需要将前面两个TextField的值传过来,有很多种方法,例举一种经典的:
    引用参数传递,将三个TextField的引用通过监听类的构造方法传过来,在监听类中定义三个TextField依次接收,在actionPerformed处理方法中,将前两个转换成int,然后再通过一个方法设置到第三个TextField上。具体实现如下:
    
    将他们的引用通过构造方法当作参数传过去,这样的话方便了许多,还有另一种更高效率的;
    
    
    看起来简便多了,通过构造方法,直接将自身的引用丢过去,这边也直接用一个来接收它的一整个引用;
    但是这样的话,就必须将num_1···定义为成员变量,用局部变量就会出错;
    这样的话更简单高效率,这也是一种设计模式,虽然我也不大懂,但是我觉得用这种方式非常方便,节省了代码先不谈,这种组织形式看起来很舒服。

    最后一种方法,是内部类的方法:
    
    内部类可以写在另一个类的内部,顾名思义,这样写的优点是,这个内部类是外包装类私有的,其他类不能直接访问,且这个内部类能拥有整个外包装类的引用。
0 0