classStaticByName{publicstaticvoidmain(Stringargs'')
{StaticClass。callme();System。out。println(”b=”+staticClass。b);}}
下面是运行结果:C:》javastaticByNamea=42b=99
5。16抽象
有时你需要定义一个给出抽象结构、但不给出每个成员函数的完整实现的类。如果某个成员函数没有完整实现,必须要由子类来覆盖,你可把它声明为抽象(abstract?copy;型。含有抽象型成员函数的类必须声明为抽象的。为了把一个类声明为抽象的,你只需在类定义的class关键词前放置关键词abstract。这?copy;类不能直接用new操作符生成实例,因为它们的完整实现还没有定义。你不能定义抽象的构造函数或抽象的静态成员函数。抽象类的子类或者实现了它的超类的所有抽象的成员函数,或者也被声明为抽象的。下面例子是一个带有抽象成员函数的类,其后是一个实现了该成员函数的类。
abstractclassA{abstractvoidcallme();voidmetoo(){system。out。println(”在A的metoo成员函数里”);}}classBextendsA{voidcallme(){System。out。println(”在B的callme成员函数里”);}}classAbstract{publicstaticvoidmain(Stringargs''){Aa=newB();
a。callme();a。metoo();}}
下面是运行结果:C:》javaAbstract在B的callme成员函数里在A的metoo成员函数里
本章小结
1。类是Java语言面向对象编程的基本元素,它定义了一个对象的结构和功能。2。Java通过在类定义的大括号里声明变量来把数据封装在一个类里,这里的变量称为实例变量。3。成员函数,是类的功能接口,是类定义里的一个子程序,在类的定义里和实例变量处于同一级别。
第六章Java图形用户接口
对一个优秀的应用程序来说,良好的图形用户接口是必不可少的。缺少良好的图形用户接口,将会给用户理解和使用应用程序带来很多不便。很难想象用户为了学会使用一个应用程序,去记一大堆命令。Java提copy;了生成一个良好的图形用户接口所需要的一copy;基本元件:面板(Panelcopy;、按钮(Buttoncopy;、标copy;(Labelcopy;、画板(Canvasescopy;、滚动条(Scrollbarcopy;、列表框(Listcopy;、文本域(TextFieldcopy;、文本区(TextAreacopy;。
6。1面板
面板提copy;了建立应用程序的空间。你可以把图形元件(包括其他面板copy;放在一个面板上。Applet类提copy;了一个基本的面板。
6。1。1布局管理
Java提copy;了几种布局:顺序布局(FlowLayoutcopy;、边界布局(BorderLayoutcopy;和网格布局(GridLayout)
6。1。1。1顺序布局
顺序布局(FlowLayoutcopy;是最基本的一种布局,面板的缺省布局就是顺序布局。顺序布局指的是把图形元件一个接一个地reg;平地放在面板上。下面是一个顺序布局的例子:
importjava。awt。*;importjava。applet。Applet;
publicclassmyButtonsextendsApplet{Buttonbutton1;button2;button3;
publicvoidinit(){button1=newButton(”确定”);button2=newButton(”打开”);button3=newButton(”关闭”);add(button1);add(button2);add(button3);}}
6。1。1。2边界布局
边界布局包括五个区:北区、南区、东区、西区和中区。这几个区在面板上的分布规律是”上北下南,左西右东”。下面是一个边界布局的例子:
importjava。awt。*;importjava。applet。Applet;
publicclassbuttonDirextendsApplet{ButtonbuttonN;buttonS;buttonW;buttonE;buttonC;
publicvoidinit(){setLayout(newBorderLayout());buttonN=newButton(”reg;”);buttonS=newButton(”火”);buttonE=newButton(”木”);buttonW=newButton(”金”);buttonC=newButton(”土”);add(”North”;buttonN);add(”South”;buttonS);add(”East”;buttonE);add(”West”;buttonW);add(”Center”;buttonC);}}
6。1。1。3网格布局
网格布局把面板分成一个个的网格,你可以给出网格的行数和列数。下面是一个网格布局的例子:
importjava。awt。*;importjava。applet。Applet;
publicclassbuttonGridextendsApplet{Buttonbutton1;button2;button3;button4;button5;button6;button7;button8;
publicvoidinit(){setLayout(newGridLayout(4;2));button1=newButton(”乾”);button2=newButton(”坤”);button3=newButton(”艮”);
button4=newButton(”震”);button5=newButton(”坎”);button6=newButton(”离”);button7=newButton(”巽”);button8=newButton(”兑”);
add(button1);add(button2);add(button3);add(button4);add(button5);add(button6);add(button7);add(button8);}}
6。2按钮
6。2。1按钮事件
用户点一下按钮,就会有一个按钮事件发生。你可以通过覆盖一个applet的action成员函数来捕捉按钮事件。publicbooleanaction(Evente;Objecto){if(e。targetinstanceofButton){system。out。println((string)o);}else{System。out。println(”Non…buttonevent”);}returntrue;}
6。2。2按钮类型
Java提copy;了标准的按压式按钮;同时也提copy;了选择式按钮和标记式按钮。
6。2。2。1选择式按钮
选择式按钮提copy;了从几个选项中选一个选项的功能。下面是从几个市中选一个市的例子,市名放在选择式按钮中:
CityChooser=newChoice();
CityChooser。addItem(”北copy;”);CityChooser。addItem(”上海”);
CityChooser。addItem(”天津”);
add(CityChooser);
6。2。2。2标记式按钮
标记式按钮的状态作为标记框事件的对象参数返回。下面是一个标记式按钮的例子:
CheckboxfillStyleButton;fillStyleButton=newCheckbox(”Solid”);
publicbooleanaction(Evente;Objectarg){if(e。targetinstanceof
Checkbox){System。out。println(”Checkbox:”+arg);}returntrue;}
6。2。2。3按键式按钮
按键式按钮是一组按钮,用户可以选中其中一个,同时这一组中的其他按钮将被关闭。下面是一个按键式按钮的例子:publicclassCheckBoxextendsApplet{CheckboxGroupcbg;publicvoidinit(){cbg=newCheckboxGroup();add(newCheckbox(”one”;cbg;true));add(newCheckbox(”two”;cbg;false));add(newCheckbox(”three”;cbg;false));}}
6。2。3自包含按钮
Java语言的面向对象特性使我们能够创建完全自包含的按钮。在自包含按钮里,你可以在copy;展按钮类里建立事件控制函数。下面是一个自包含按钮的例子:
importjava。awt。*;importjava。applet。Applet;
classokButtonextendsButton{
publicokButton(){setLabel(”Ok”);}
publicbooleanaction(Evente;Objectarg)
{System。out。println(”OKButton”);returntrue;}}
publicclassbuttontestextendsApplet{okButtonmyOkButton;
publicvoidinit(){myOkButton=newokButton();add(myOkButton);}}
6。3标copy;
标copy;是一种放到面板上的静止的正文。下面是一个标copy;的例子:importjava。awt。*;importjava。applet。Applet;publicclasslabelextendsApplet{publicvoidinit(){setLayout(newFlowLayout(FlowLayout。CENTER;10;10));Labellabel1=newLabel(”你好!”);Labellabel2=newLabel(”另一个标copy;”);add(label1);add(label2);}}
6。4列表框
列表框使用户易于操作大量的选项。创建列表框的方法和Choicebutton有copy;相似。列表框的所有条目都是可见的,如果选项很多,超出了列表框可见区的范围,则列表框的旁边将会有一个滚动条。首先,创建列表框:Listl=newList(4;false);这个成员函数创建了一个显示4行的列表框。第二个参数”false”表示这个列表框是单选的,如果是”true”,则表示是多选的。下面增加列表框的选项:l。addItem(”北copy;大学”);l。addItem(”清华大学”);l。addItem(”吉林大学”);l。addItem(”复copy;大学”);l。addItem(”南开大学”);l。addItem(”天津大学”);l。addItem(”南copy;大学”);add(l);
6。4。1在列表框中进行选择
可以用成员函数getSelectedItem()或getSelectedItems()来接收在列表框中被选的选项。在单选列表框里,”双击”一个选项就可以触发一个可被action()成员函数捕捉到的事件。publicbooleanaction(Evente;Objectarg){。。。if(e。targetinstanceofList){System。out。println(”Listentry:”+arg);}。。。}
6。4。2多选列表框
对于多选列表框,要使你的选择产生作用,需要使用其他的外部事件。例如,你可以使用按钮事件:publicbooleanaction(Evente;Objectarg){。。。if(e。targetinstanceofButton){。。。if(”Ok”。equals(arg)){string''selected;selected=l。getSelectedItems();for(intI=0;I