当前位置 |首页 > 代写教程 > 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
  }
} ///:~

代写