当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

java捕捉事件[Java编程]

赞助商链接



  本文“java捕捉事件[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
大家可注意到假定编译和运行上面的程序片,按下按钮后不会发生任何事情.必须进入程序片内部,编写用于决意要发生什么事情的代码.关于由事件驱动的程序计划,它的基本目标就是用代码捕捉发生的事件,并由代码对那些事件作出呼应.事实上,GUI的大部份内容都是环绕这种事件驱动的程序计划展开的.
经过本书前面的学习,大家应当有了面向对象程序计划的一些底子,此时大概会想到该当有一些面向对象的办法来专门掌握事件.比方,大概不得不担当每个按钮,并过载一些“按钮按下”办法(固然这显得非常麻烦有有限).大家也大概认为存在一些主控“事件”类,此中为但愿呼应的每个事件都包含了一个办法.
在对象从前,事件掌握的典型方法是switch语句.每个事件都对应一个举世无双的整数编号;并且在主事件掌握办法中,需求专门为那个值写一个switch.
Java 1.0的AWT没有采取任何面向对象的手段.此外,它也没有利用switch语句,没有打算依靠那些分配给事件的数字.相反,我们必须成立if语句的一个嵌套系列.通过if语句,我们需求尝试做的事情是侦测到作为事件“目标”的对象.换言之,那是我们关心的全部内容——假定某个按钮是一个事件的目标,那么它必定是一次鼠标点击,并要基于那个假定持续下去.但是,事件里也大概包含了其他信息.比方,假定想调查一次鼠标点击的像素位置,以便画一条引向那个位置的线,那么Event对象里就会包含那个位置的信息(也要注意Java 1.0的组件只能产生有限种类的事件,而Java 1.1和Swing/JFC组件则可产生完好的一系列事件).
Java 1.0版的AWT办法串通的条件语句中存在action()办法的调用.固然整个Java 1.0版的事件模子不兼容Java 1.1版,但它在还不支持Java1.1版的机械和运行简单的程序片的系统中更遍及地利用,警告您利用它会变得非常的舒服,包含对下面利用的action()程序办法而言.
action()拥有两个自变量:第一个是事件的范例,包含全部的触发调用action()的事件的有关信息.比方鼠标单击、普通按键按下或释放、特别按键按下或释放、鼠标移动大概拖动、事件组件得到或丧失核心,等等.第二个自变量普通是我们忽视的事件目标.第二个自变量封装在事件目标中,所以它像一个自变量一样的冗长.
需调用action()时情形非常有限:将控件置入窗体时,一些范例的控件(按钮、复选框、下拉列表单、菜单)会发生一种“尺度行动”,从而随呼应的Event对象发动对action()的调用.比方对按钮来说,一旦按钮被按下,并且没有再多按一次,就会调用它的action()办法.这种行为普通恰是我们所但愿的,因为这恰是我们对一个按钮正常观感.但正如本章背面要讲到的那样,还可通过handleEvent()办法来处理其他很多范例的事件.
前面的例程可举行一些扩大,以便象下面这样掌握按钮的点击:
//: Button2.java
// Capturing button presses
import java.awt.*;
import java.applet.*;

public class Button2 extends Applet {
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public void init() {
    add(b1);
    add(b2);
  }
  public boolean action(Event evt, Object arg) {
    if(evt.target.equals(b1))
      getAppletContext().showStatus("Button 1");
    else if(evt.target.equals(b2))
      getAppletContext().showStatus("Button 2");
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~
为理解目标是什么,需求向Event对象询问它的target(目标)成员是什么,然后用equals()办法查抄它能否与自己感爱好的目标对象句柄符合.为全部感爱好的对象写好句柄后,必须在末尾的else语句中调用super.action(evt, arg)办法.我们在第7章已经说过(有关多形性的那一章),此时调用的是我们过载过的办法,而非它的底子类版本.但是,底子类版本也针对我们不感爱好的全部情形供应了呼应的掌握代码.除非明确举行,不然它们是不会得到调用的.返回值指出我们能否已经处理了它,所以假定确切与一个事件符合,就应返回true;不然就返回由底子类event()返回的东西.
对这个例子来说,最简单的行动就是打印出毕竟是什么按钮被按下.一些系统答应你弹出一个小消息窗口,但Java程序片却防碍窗口的弹出.不过我们可以用调用Applet办法的getAppletContext()来拜候浏览器,然后用showStatus()在浏览器窗口底部的状况栏上显示一条信息(注释③).还可用一样的办法打印出对事件的一段完好阐明文字,办法是调用getAppletConext().showStatus(evt + "").空字串会强迫编译器将evt转换成一个字符串.这些报告关于测试和调试分外有效,因为浏览器大概会覆盖我们的消息.

③:ShowStatus()也属于Applet的一个办法,所以可直接调用它,没必要调用getAppletContext().

固然看起来仿佛很奇特,但我们确切也能通过event()中的第二个参数将一个事件与按钮上的文字相配.采取这种办法,上面的例子就变成了:
//: Button3.java
// Matching events on button text
import java.awt.*;
import java.applet.*;

public class Button3 extends Applet {
  Button 
    b1 = new Button("Button 1"), 
    b2 = new Button("Button 2");
  public void init() {
    add(b1);
    add(b2);
  }
  public boolean action (Event evt, Object arg) {
    if(arg.equals("Button 1"))
      getAppletContext().showStatus("Button 1");
    else if(arg.equals("Button 2"))
      getAppletContext().showStatus("Button 2");
    // Let the base class handle it:
    else 
      return super.action(evt, arg);
    return true; // We've handled it here
  }
} ///:~
很难切当知道equals()办法在这儿要做什么.这种办法有一个很大的问题,就是开始利用这个新技术的Java程序员至少需求耗费一个受挫折的期间来在对比按钮上的文字时发现他们要末大写了要末写错了(我就有这种经验).一样,假如我们改变了按钮上的文字,程序代码将不再工作(但我们不会得到任何编译时和运行时的信息).所以假如大概,我们就得避免利用这种办法.
  以上是“java捕捉事件[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .