|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践!
到今朝为止,我们已利用了action(),现有另外一种办法handleEvent()可对每事务举行实验。当一个事务产生时,它老是针对独自事务或产生在独自的事务对象上。该对象的handleEvent()办法是主动挪用的,而且是被handleEvent()创立并传送到handleEvent()里。默许的handleEvent()(handleEvent()界说在组件里,基本类的一切控件都在AWT里)将像我们之前一样挪用action()或别的一样的办法往指明鼠标的举动、键盘举动大概指明挪动的核心。我们将会在本章的前面部分看到。
假如别的的办法-出格是action()-不克不及满意我们的必要怎样办呢?至于列表框,比方,假如我想捕获鼠标单击,但action()只呼应双击怎样办呢?这个解答是过载handleEvent(),究竟它是从程序片中失掉的,因而能够过载任何非断定的办法。当我们为程序片过载handleEvent()时,我们会失掉一切的事务在它们发送进来之前,以是我们不克不及假定“这里有我的按钮可做的事务,以是我们能够假定按钮被按下了”从它被action()设为真值。在handleEvent()中按钮具有核心且或人对它举行分派都是大概的。不管它公道与否,我们可测试这些事务并依照handleEvent()来举行操纵。
为了修正列表样本,使它会呼应鼠标的单击,在action()中按钮测试将被过载,但代码会处置的列表将像上面的例子被移进handleEvent()中往:- //:List2.java
- //UsinglistswithhandleEvent()
- importjava.awt.*;
- importjava.applet.*;
- publicclassList2extendsApplet{
- String[]flavors={"Chocolate","Strawberry",
- "VanillaFudgeSwirl","MintChip",
- "MochaAlmondFudge","RumRaisin",
- "PralineCream","MudPie"};
- //Show6items,allowmultipleselection:
- Listlst=newList(6,true);
- TextAreat=newTextArea(flavors.length,30);
- Buttonb=newButton("test");
- intcount=0;
- publicvoidinit(){
- t.setEditable(false);
- for(inti=0;i<4;i++)
- lst.addItem(flavors[count++]);
- add(t);
- add(lst);
- add(b);
- }
- publicbooleanhandleEvent(Eventevt){
- if(evt.id==Event.LIST_SELECT||
- evt.id==Event.LIST_DESELECT){
- if(evt.target.equals(lst)){
- t.setText("");
- String[]items=lst.getSelectedItems();
- for(inti=0;i<items.length;i++)
- t.appendText(items[i]+"
- ");
- }
- else
- returnsuper.handleEvent(evt);
- }
- else
- returnsuper.handleEvent(evt);
- returntrue;
- }
- publicbooleanaction(Eventevt,Objectarg){
- if(evt.target.equals(b)){
- if(count<flavors.length)
- lst.addItem(flavors[count++],0);
- }
- else
- returnsuper.action(evt,arg);
- returntrue;
- }
- }///:~
复制代码
这个例子同后面的例子不异除增添了handleEvent()外几乎千篇一律。在程序中做了实验来考证是不是列表框的选择和非选择存在。如今请记着,handleEvent()被程序片所过载,以是它能在窗体中任何存在,而且被别的的列表当做事务来处置。因而我们一样必需经由过程实验来察看方针。(固然在这个例子中,程序片中只要一个列表框以是我们能假定一切的列表框事务必需服务于列表框。这是一个欠好的习气,一旦别的的列表框到场,它就会酿成程序中的一个缺点。)假如列表框婚配一个我们感乐趣的列表框,像后面的一样的代码将按下面的战略来运转。注重handleEvent()的窗体与action()的不异:假如我们处置一个独自的事务,将前往真值,但假如我们对别的的一些事务不感乐趣,经由过程handleEvent()我们必需前往super.handleEvent()值。这即是程序的中心,假如我们不那样做,别的的任何一个事务处置代码也不会被挪用。比方,试注解在下面的代码中前往super.handleEvent(evt)的值。我们将发明action()没有被挪用,固然那不是我们想失掉的。对action()和handlEvent()而言,最主要的是随着下面例子中的格局,而且当我们本人不处置事务时一向前往基本类的办法版本信息。(在例子中我们将前往真值)。(侥幸的是,这些范例的毛病的仅属于Java1.0版,在本章前面将看到的新计划的Java1.1打消了这些范例的毛病。)
在windows里,假如我们按下shift键,列表框主动同意我们做多个选择。这十分的棒,由于它同意用户做单个或多个的选择而不是编程时代流动的。我们大概会以为我们变得加倍的夺目,而且当一个鼠标单击被evt.shiftdown()发生时假如shift键是按下的将实行我们本人的实验程序。AWT的计划妨害了我们-我们不能不往懂得哪一个项目被鼠标点击时是不是按下了shift键,以是我们能作废其他部分一切的选择而且只选择那一个。不论如何,我们是不成能在Java1.0版中做出来的。(Java1.1将一切的鼠标、键盘、核心事务传送到列表中,以是我们可以完成它。)
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|