第5章-构成用户界面的窗口环境-计算机系JAVA培训讲义课件_第1页
第5章-构成用户界面的窗口环境-计算机系JAVA培训讲义课件_第2页
第5章-构成用户界面的窗口环境-计算机系JAVA培训讲义课件_第3页
第5章-构成用户界面的窗口环境-计算机系JAVA培训讲义课件_第4页
第5章-构成用户界面的窗口环境-计算机系JAVA培训讲义课件_第5页
已阅读5页,还剩183页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章

构成用户界面的窗口环境

北京大学计算机系代亚非1第5章

构成用户界面的窗口环境

北京大学计算机系1构成用户界面的窗口环境5.1使用AWT(AbstractWindowToolkit)构件5.2包含构件的构件----构件容器(container)5.3事件的传递5.4各种构件的应用实例(一)5.5外观的管理与控制5.6各种构件的应用实例(二)5.7总结2构成用户界面的窗口环境5.1使用AWT(Abstract5.1使用AWT构件在AWT的概念中,窗口系统所显示的各种对象统称为构件:Button,Menu,List等等都是构件。Component是代表构件最基本的类。Component类中定义了各种窗口对象中最基本、最重要的方法和性质。随时随处都有可能利用Component定义的方法。35.1使用AWT构件在AWT的概念中,窗口系统所显示的各种5.1使用AWT构件已经学过的:getFont,handleEvent,keyUpkeyDown,mouseUp,mouseDown,mouseMove,mouseEnter,mouseExit,mouseDrag,repaintsetFont,resize没有学过的:action,disable,enable,getBackground,getForeground,hide,inside,isEnable,isShowing,isVisible,locate,location,move,setBackground,setForeground,show,size45.1使用AWT构件已经学过的:没有学过的:4列表按钮菜单container另一个窗口窗口,对话框5.2包含构件的构件----构件容器(container)container5列表按钮菜单container另一个窗口窗口,对话框5.25.2包含构件的构件----构件容器(container)importjava.awt.*;importjava.applet.Applet;publicclassCountClickextendsApplet{intCurrentMarks=0;publicinit(){Buttonb1=newButton(“按钮”);add.b1;}}按钮65.2包含构件的构件----构件容器(container)5.2包含构件的构件----构件容器(container)AWT使用Container类来定义最基本的构件容器,它有两个子类:Window类和Panel类.在Window类还有两个子类1.定义对话框,用Dialog子类;Java还提了一个Dialog的子类---FileDialog,用它生成文件对话框2.定义一般意义的窗口,用Frame类.75.2包含构件的构件----构件容器(container)5.2包含构件的构件----构件容器(container)Panel干什么用的呢?使你更方便的组织你的构件,得到赏心悦目的布局Applet是Panel的子类,因此在小应用程序里可以直接加入构件,而一般的应用程序必须先定义构件容器.小应用程序在浏览器中所显示的区域就是Panel,所占的尺寸就是缺省得Panel尺寸.85.2包含构件的构件----构件容器(container)ContainerWindowPanelComponentFrameDialogFileDialogApplet5.2包含构件的构件----构件容器(container)ButtonMenuCheckboxTextfield9ContainerWindowPanelComponentF5.3事件的传递(1.02)当动作发生在按钮上时,首先看按钮这个类有没有action方法,如果没有则看包含按钮的容器类(即panel)有没有action方法,如果没有事件就传递窗口,如果没有就传递给component的通用处理方法,如果程序中没有定义任何action方法,实际上事件最终不被处理窗口按钮panel105.3事件的传递(1.02)当动作发生在按钮上时,首先看classMyPanelextendsPanel{MyBtnb=newMyBtn(“ok”);add(b);booleanaction(){…….;}}classMyClassextendsFrame{MyPanelp=newMypanel();add(p);Buttonb=newButton(exit);add(b);booleanaction(){…….;}}窗口exitclassMyBtnextendsButton{booleanaction(){…….;returntrue;}}okPanel11classMyPanelextendsPanelcla5.3事件的传递(1.02)事件由包含层次由内向外传递.每个处理事件的方法要有一个返回值,通知是否继续向上传递booleanaction(Eventevt,Objectarg){……;

returntrue;}125.3事件的传递(1.02)事件由包含层次由内向外传递.125.3事件的传递(1.1)窗口buttonpanel按钮的监听器窗口获面板的监听器135.3事件的传递(1.1)窗口buttonpanel按钮的确定取消5.4各种构件的应用实例--按钮Button类功能:创建按钮事件创建一个ButtonButtonmyButton=newButton(str);将button放到窗口系统中:add(newButton(“确定”);add(newButton(“取消”);Button类的常用方法getLabelsetLabel14确定取消5.4各种构件的应用实例--按钮Button类14action---接受动作事件,调用repaintinit---建立buttonpaint---显示文字5.4各种构件的应用实例--按钮处理button产生的事件例:创建一个按钮,每当按下它时,在屏幕显示文字(singlebutton.html)想一想:应该有哪些类?Button,Font;应有哪些方法?15action---接受动作事件,调用repaintinit-importjava.awt.*;importjava.applet.Applet;publicclassbuttonextendsApplet{Fontfont;Buttonb1;publicvoidinit(){font=newFont("TimesRoman",Font.BOLD,20);b1=newButton("push");add(b1);setFont(font);}

5.4各种构件的应用实例--按钮16importjava.awt.*;importjava.5.4各种构件的应用实例--按钮booleanaction(Eventevt,Objectarg){y+=5;repaint();returntrue;}paint(Graphicsg){g.drawString("Button”,10,y);}175.4各种构件的应用实例--按钮booleanactio5.4各种构件的应用实例--按钮importjava.awt.*;\\例:不在applet中的按钮classButtoninFrame{publicstaticvoidmain(Stringargs[]){Framemyframe=newFrame();myframe.setTitle("ButtoninFrame"); myframe.resize(200,200);myframe.show(); Buttonb1=newButton("Button1");Buttonb2=newButton("Button2");myframe.add(b1);myframe.add(b2);}}.185.4各种构件的应用实例--按钮importjava.a5.4各种构件的应用实例一般步骤:创建new加入add响应action处理195.4各种构件的应用实例一般步骤:创建new加入add5.4各种构件的应用实例SportsComputerMusicArtSportsComputerMusicArtminmaxstart1NewCheckbox(label,null,false);CheckboxGroupgr=newCheckboxGroup();NewCheckbox(label,gr,false);NewCheckbox(label,gr,true);NewTextField(20);常用的方法getText();setText();setEchoCharacter(charc)Scrollbar(VERTICAL,50,0,1,100);newTextArea(“thisisatest”,20,40);205.4各种构件的应用实例SportsComputerMus5.4各种构件的应用实例--CheckBox应用举例建立三个复选框,被选中者的标签内容变成“changes”应有的类:Checkbox应有的方法:init:建立复选框action:接受动作事件setLabel(“*****”);215.4各种构件的应用实例--CheckBox应用举例215.4各种构件的应用实例--CheckBoximportjava.awt.*;publicclasscheckboxextendsjava.applet.Applet{ Checkboxb1,b2,b3; publicvoidinit() {b1=newCheckbox("Label1",null,false); b2=newCheckbox("Label2",null,false); b3=newCheckbox("Label3",null,false); add(b1);add(b2);add(b3); }225.4各种构件的应用实例--CheckBoximportpublicbooleanaction(Eventevt,Objectarg){if(evt.targetinstanceofCheckbox){Checkboxselectedbox=(Checkbox)evt.target;Stringstr=selectedbox.getLabel();if(str=="Label1") selectedbox.setLabel("Chnage1");elseif(str=="Label2") selectedbox.setLabel("Chnage2");elseif(str=="Label3") selctedbox.setLabel("Change3");}repaint();returntrue;}5.4各种构件的应用实例---CheckBox23publicbooleanaction(Eventev例:在文本行中输入,并用字符串接受,显示出来类的数据构成:Textfield,Button,String类的方法构成:init(),action():接受按钮事件,调用paint()paint():用getText()方法得到输入内容,并显示.5.4各种构件的应用实例---TextField24例:在文本行中输入,并用字符串接受,显示出来5.4各种构件importjava.awt.*;publicclasstextfieldkeyextendsjava.applet.Applet{TextFieldt;Strings;Buttonbutton; publicvoidinit() {t=newTextField("",25);add(t);button=newButton("getText"); add(button);}

5.4各种构件的应用实例---TextField25importjava.awt.*;5.4各种构件的应用实publicbooleanaction(Eventevt,Objectarg){if(evt.targetinstanceofButton){repaint();}returntrue;}publicvoidpaint(Graphicsg){s=t.getText(); g.drawString(s,40,80); }5.4各种构件的应用实例---TextField26publicbooleanaction(Eventev0124354015345.5外观的管理与制270124354015345.5外观的管理与制27button1button2button4button35.5外观的管理与制Panel类(面板)功能:容纳其他对象,安排合理布局创建面板:PanelmyPanel=newPanel();add(myPanel);将面板作为容器:mypanel.add(button)28button1button2button4button35.5.5外观的管理与制例:(panel.htm)importjava.awt.*;publicclassPanelextendsjava.applet.Applet{Panelpanel1,panel2;Buttonbutton1,button2,button3,button4;publicvoidinit(){panel1=newPanel();panel2=newPanel();add(panel1);add(panel2);button1=newButton("Button1");button2=newButton("Button2");button3=newButton("Button3");button4=newButton("Button4");panel1.add(button1);panel1.add(button2);panel2.add(button3);panel2.add(button4);}}295.5外观的管理与制例:(panel.htm)import南中北西东5.5外观的管理与制BorderLayout类功能:Applet分成五个区创建setLayout(newBorderLayout());将其他构件加入add(“East”,newButton(“东”);add(“South”,newButton(“南”);add(“West”,newButton(“西”);add(“North”,newButton(“北”);add(“Center”,newButton(“中”);30南北西东5.5外观的管理与制BorderLayout类305.5外观的管理与制FlowLayout类缺省的输出管理器GridLayout类GridLayoutmylayout=newGridLayout(3,3,0,0)setLayout();rowscolshspacevspace315.5外观的管理与制FlowLayout类rowscols5.5外观的管理与制GridBagLayout类和GridBagConstraints类功能:借助于GridBagConstraints类,实现更灵活的外观管理每个构件后都跟随一个GridBagLayout对象实体,来决定构件的外观.创建GridBagLayoutmyLayout=newGridBagLayout();325.5外观的管理与制GridBagLayout类和325.5外观的管理与制GridBagConstraints类的约束条件gridwidth,gridheight,gridx,gridy,weightx,weighty,ipadx,ipady,insetsfill及其设置GridBagConstraints.NONEGridBagConstraints.HORIZONTALGridBagConstraints.VERTICALGridBagConstraints.BOTHGridBagConstraints.RELATIVE335.5外观的管理与制GridBagConstraints类button1button2button3button8button5button6button7button4button95.5外观的管理与制例:(GridBagApplet.html)34button1button2button3button8bu5.5外观的管理与制publicvoidinit(){GridBagLayoutlayout=newGridBagLayout();setLayout(layout);GridBagConstraintsGBC=newGridBagConstraints(); Buttonbutton1=newButton("button1"); Buttonbutton2=newButton("button2"); Buttonbutton3=newButton("button3"); Buttonbutton4=newButton("button4"); Buttonbutton5=newButton("button5"); Buttonbutton6=newButton("button6"); Buttonbutton7=newButton("button7"); Buttonbutton8=newButton("button8"); Buttonbutton9=newButton("button9");355.5外观的管理与制publicvoidinit()5.5外观的管理与制GBC.fill=GridBagConstraints.BOTH;(按钮可以在水平和垂直两个方向扩展)layout.setConstraints(button1,GBC);add(button1);GBC.gridwidth=GridBagConstraints.RELATIVE;(BOTH依然起作用,紧挨着最后一个按钮,)layout.setConstraints(button2,GBC);add(button2);GBC.gridwidth=GridBagConstraints.REMAINDER;(填充剩余部分)layout.setConstraints(button3,GBC);add(button3);But1But2But3365.5外观的管理与制GBC.fill=GridBagConBut1But2But3But45.5外观的管理与制GBC.gridwidth=GridBagConstraints.REMAINDER;(表示该按钮独占一行)layout.setConstraints(button4,GBC);add(button4);37But1But2But3But45.5外观的管理与制GBCBut1But2But3But4But6But55.5外观的管理与制GBC.gridwidth=2;(表示该按钮占两个单元)layout.setConstraints(button5,GBC);add(button5);GBC.gridwidth=GridBagConstraints.REMAINDER;layout.setConstraints(button6,GBC);add(button6);38But1But2But3But4But6But55.5外观But1But2But3But4But6But5But75.5外观的管理与制GBC.gridwidth=1;GBC.gridheight=2;(高度为两个单元)layout.setConstraints(button7,GBC);add(button7);39But1But2But3But4But6But5But75.But1But2But3But4But6But5But7But8But95.5外观的管理与制GBC.gridwidth=GridBagConstraints.REMAINDER;GBC.gridheight=1;layout.setConstraints(button8,GBC);add(button8);layout.setConstraints(button9,GBC);add(button9);40But1But2But3But4But6But5But7Bu5.6各种构件的应用实例---Canvas5.6.2Canvas类(画布)功能:制作其他构件,通常用来放置图形图像,或绘图.画图可以直接在applet区域上进行,定义了Canvas对象后将paint()语句作为该对象的方法,这些动作就自动发生在画布区.通常不需要处理画布上发生的事件创建Canvascanvas=newCanvas();add(canvas);415.6各种构件的应用实例---Canvas5.6.2Ca5.6各种构件的应用实例---Canvas例:根据程序说出运行结果注意一个程序中生成一个canvas类的实例,另一个程序没有425.6各种构件的应用实例---Canvas例:根据程序说出5.6各种构件的应用实例---Canvasimportjava.awt.*;importjava.applet.*;publicclasscanvas_test_2extendsApplet{ publicvoidinit() {setLayout(newBorderLayout()); add("North",newButton("button1")); add("South",newButton("button2")); add("West",newButton("button3")); add("East",newButton("button4")); }

publicvoidpaint(Graphicsg) {g.setColor(Color.red);g.fillRect(0,0,50,100); g.setColor(Color.blue); g.fillRect(30,0,100,40);}}435.6各种构件的应用实例---Canvasimportj5.6各种构件的应用实例---Canvasimportjava.awt.*;importjava.applet.*;publicclasscanvas_testextendsApplet{ MyCanvasmycanvas=newMyCanvas(); publicvoidinit() {setLayout(newBorderLayout());

add("Center",mycanvas); add("North",newButton("button1")); ….; add("East",newButton("button4")); }}445.6各种构件的应用实例---Canvasimportj5.6各种构件的应用实例---CanvasclassMyCanvasextendsCanvas{ publicvoidpaint(Graphicsg) {g.setColor(Color.red);g.fillRect(0,0,50,100);g.setColor(Color.blue);g.fillRect(30,0,100,40);}}455.6各种构件的应用实例---CanvasclassMy5.6各种构件的应用实例---Canvas465.6各种构件的应用实例---Canvas46利用输出管理器按钮和画布按钮接收鼠标事件变换颜色执行重画colorcolorcolor5.6各种构件的应用实例---Canvas例:按动鼠标改变画布的颜色(CanvasApplet)有哪些类?Canvas,Button,Color;哪些方法?init(),action(),swapColor(),paint()47利用输出管理按钮接收变换颜色执行重画colorcolorcoclassCanvasAppletextendsApplet{MyCanvasmycanvas=newMyCanvas();publicvoidinit(){setLayout(newBorderLayout());Buttonbutton=newButton("Color");add("North",button);add(“Center”,mycanvas);resize(200,250);}5.6各种构件的应用实例---Canvas.48classCanvasAppletextendsApp5.6各种构件的应用实例---Canvasbooleanaction(Eventevt,Objectarg){if(arg=="Color")mycanvas.swapColor();returntrue;}495.6各种构件的应用实例---Canvasboolean5.6各种构件的应用实例---Canvas

classMyCanvasextendsCanvas{Colorcolor;MyCanvas(){color=Color.red; }publicvoidpaint(Graphicsg){g.setColor(color);g.fillRect(20,20,100,100);g.setColor(color.white);g.drawString("CANVAS",40,40);}publicvoidswapColor(){if(color==Color.black)color=Color.red;elseif(color==Color.red)color=Color.green; else color=Color.black;repaint();}}.505.6各种构件的应用实例---Canvas

classM5.6各种构件的应用实例---Frame5.6.3Frame类功能:制作一般的独立窗口,它是构件容器创建FramefmInstance=newFrame();或FramefmInstance=newFrame(“Thewindowfortest”);将其显示到屏幕上fmInstance.show()注意:不用add()515.6各种构件的应用实例---Frame5.6.3Fra5.6各种构件的应用实例---Frame常用的方法dispose,getCursorType,getIconImage,getMenuBar,getTitle,isResizable,setCursor,setIconImage,setMenuBar,setResizable,setTitle窗口的相关事件:Event.WINDOW_DEICONIFY,_DESTROY_EXPOSE,_ICONIFY,_MOVED525.6各种构件的应用实例---Frame常用的方法525.6各种构件的应用实例---Frame例:创建一个窗口,并用按钮控制它的显示或隐藏FrameAppletFrameWindowThisisCustomFramewindowShowwindowhidewindowShowwindow535.6各种构件的应用实例---Frame例:创建一个窗口,5.6各种构件的应用实例---Frame在applet中action处理Button的事件action捕获buttonFrame.showFrame.hidebutton.labelisshowbutton.labelishide545.6各种构件的应用实例---Frame在applet中a5.6各种构件的应用实例---Frame.FrameWindowThisisCustomFramewindow为了将字符显示在自定义窗口中,包含输出语句的方法必须在自定义的窗口类中关闭窗口的事件在窗口类本身处理.注:处理窗口中的事件用handelEvent()publicbooleanhandleEvent(Eventevt){switch(evt.id){ caseEvent.WINDOW_DESTROY: dispose();System.exit(0); default:returnsuper.handleEvent(evt);}}555.6各种构件的应用实例---Frame.FrameWi5.6各种构件的应用实例---FramepublicclassFrameAppletextendsApplet{CustomFrameframe;Buttonbutton;publicvoidinit(){frame=newCustomFrame("CustomFrameWindow");button=newButton("ShowWindow");add(button);}}publicbooleanaction(Eventevt,Objectarg){booleanvisible=frame.isShowing();if(visible){frame.hide();button.setLabel("Showwindow");}else{frame.show();button.setLabel("HideWindow");returntrue;}}565.6各种构件的应用实例---Framepubliccl5.6各种构件的应用实例---FrameclassCustomFrameextendsFrame{CustomFrame(Stringtitle){super(title);}

publicbooleanhandleEvent(Eventevt){switch(evt.id){ caseEvent.WINDOW_DESTROY: dispose();System.exit(0); default:returnsuper.handleEvent(evt);}}

publicvoidpaint(Graphicsg){resize(200,100);g.drawString("thisisacustomwindow.",30,30); }}575.6各种构件的应用实例---FrameclassCusbutton2button1Button110button21button2button1Button10button275.6各种构件的应用实例---Frame多窗口(FrameApplet\ButtonsFrames.class-f1.bat)58button2button1Button110but5.6各种构件的应用实例---Frame1.一个窗口类创建两个实例2.由于有不同的事件发生(按钮,关窗口),因此事件先由通用事件处理程序来接收,然后再根据情况做相应的处理.switch(evt.id){caseEvent.WINDOW_DESTROY:dispose();returntrue;caseEvent.ACTION_EVENT:returnaction(evt,evt.arg);default:returnsuper.handleEvent(evt);}}595.6各种构件的应用实例---Frame1.一个窗口类创建5.6各种构件的应用实例---Frame3.任何时候只有一个窗口是活动的(active)的因此不必考虑那个判断是哪一个窗口发生的事件4.一般的结构在main()中,只做与窗口有关的事情:创建窗口,显示窗口在构造方法中,安排窗口中的构件605.6各种构件的应用实例---Frame3.任何时候只有5.6各种构件的应用实例---Frameimportjava.awt.*;classButtonsInFramesextendsFrame{inta1=0,a2=0; publicstaticvoidmain(Stringargs[]) {ButtonsInFramesmyframe1=newButtonsInFrames(); myframe1.setTitle("ButtoninFrame1"); myframe1.resize(200,200); myframe1.show(); ButtonsInFramesmyframe2=newButtonsInFrames(); myframe2.setTitle("ButtoninFrame2"); myframe2.resize(200,200); myframe2.show(); }615.6各种构件的应用实例---Frameimportja5.6各种构件的应用实例---FrameButtonsInFrames(){setLayout(newBorderLayout());Buttonb1=newButton("Button1");Buttonb2=newButton("Button2");add("North",b1);add("South",b2);}publicbooleanhandleEvent(Eventevt){switch(evt.id){caseEvent.WINDOW_DESTROY:dispose();returntrue; caseEvent.ACTION_EVENT: returnaction(evt,evt.arg); default:returnsuper.handleEvent(evt);}}625.6各种构件的应用实例---FrameButtonsIn5.6各种构件的应用实例---Framepublicbooleanaction(Eventevt,Objectarg){ if(evt.targetinstanceofButton) if(arg=="Button1") a1++;elsea2++; repaint(); returntrue;}publicvoidpaint(Graphicsg){ g.drawString("button1"+a1,5,80); g.drawString("button2"+a2,5,100);}}.635.6各种构件的应用实例---FramepublicboFontDisplayerFontDisplay!Youcaninputsomethinghere.ArialCourierNewTimesNewRoman1820222426CourierNew225.6各种构件的应用实例---练习与List类有关的事件Event.LIST_DESELECT,Event.LIST_SELECT例:(FontDisplay.class---f3.bat)publicbooleanhandleEvent(Eventevt){switch(evt.id){caseEvent.WINDOW_DESTROY:dispose();System.exit(0);default:returnsuper.handleEvent(evt);}}.handleEventWINDOW_DESTROYhandleEventLIST_SELECTaddFrame类Panel类TextArea类ListListaddaddaddaraearea.setfont(字型,字体,字号)64FontDisplayerFontDisplay!Arial5.6各种构件的应用实例---练习importjava.awt.*;classFontDisplayextendsFrame{ TextAreaFontShower; publicstaticvoidmain(Stringargs[]) { FontDisplaymyFrame=newFontDisplay(); myFrame.setTitle("FontDisplayer"); myFrame.resize(450,300); myFrame.show();}publicFontDisplay() {setLayout(newBorderLayout(5,5)); FontShower=newTextArea("FontDisplay!”);add("West",newFontPanel(FontShower));add("Center",FontShower);}655.6各种构件的应用实例---练习importjava.对窗口来说只有一个事件5.6各种构件的应用实例---练习publicbooleanhandleEvent(Eventevt){ switch(evt.id){ caseEvent.WINDOW_DESTROY: dispose();System.exit(0);default:returnsuper.handleEvent(evt); }}66对窗口来说只有一个事件5.6各种构件的应用实例---练习p对右边的文本区设置属性,利用引用传递.得到列表选项用getItem事件处理用用handleEvent,得到两个参数--字型,字号.5.6各种构件的应用实例---练习在panel中创建两个列表往列表中加入条目用additem(str).voidupdateFontShower(){area.setFont(newFont(CurrentFontName,Font.PLAIN,CurrentSize));}}67对右边的文本区设置属性,利用引用传递.得到列表选项用getI5.6各种构件的应用实例---练习publicbooleanhandleEvent(Eventevt){switch(evt.id){caseEvent.LIST_SELECT:Listtarget=(List)evt.target;StringitemName=target.getItem(((Integer)evt.arg).intValue());if(target==FontSelector)CurrentFontName=itemName;elseCurrentSize=Integer.parseInt(itemName);685.6各种构件的应用实例---练习publicboole5.6各种构件的应用实例---练习StringFontNames[]={"Arial","CourierNew","TimesNewRoman"};ListFontSelector=newList();for(i=0;i<FontNames.length;i++)FontSelector.addItem(FontNames[i]);add(FontSelector);ListSizeSelector=newList();for(i=6;i<64;i+=2)SizeSelector.addItem(String.valueOf(i));add(SizeSelector);695.6各种构件的应用实例---练习StringFontNupdateFontShower(){area.setFont(param1,param2,param3)5.6各种构件的应用实例---练习classFontPanelextendsPanel{ intCurrentSize=20; StringCurrentFontName; TextAreaarea;;ListFontSelector,SizeSelector;

70updateFontShower()5.6各种构件的应用5.6各种构件的应用实例---练习FontPanel(TextAreaFS)//把另一个对象做参数{inti;StringFontNames[]={"Arial","CourierNew","TimesNewRoman"};setLayout(newGridLayout(2,1,5,5));FontSelector=newList();for(i=0;i<FontNames.length;i++)FontSelector.addItem(FontNames[i]);add(FontSelector);SizeSelector=newList();for(i=6;i<64;i+=2)SizeSelector.addItem(String.valueOf(i));add(SizeSelector);area=FS;CurrentFontName=FontNames[0];updateFontShower(); }715.6各种构件的应用实例---练习FontPanel(Te5.6各种构件的应用实例---练习publicbooleanhandleEvent(Eventevt){switch(evt.id){caseEvent.LIST_SELECT:Listtarget=(List)evt.target;StringitemName=target.getItem(((Integer)evt.arg).intValue());if(target==FontSelector)CurrentFontName=itemName;elseCurrentSize=Integer.parseInt(itemName);updateFontShower();returntrue;default: returnsuper.handleEvent(evt);}}voidupdateFontShower(){area.setFont(newFont(CurrentFontName,Font.PLAIN,CurrentSize));}}725.6各种构件的应用实例---练习publicboole菜单系统一般菜单可撕下菜单帮助菜单类MenuBar选项#1菜单中的菜单选项#3选项#4选项#1选项#2第三层菜单选项#3选项#1选项#2类Menu类MenuItem5.6各种构件的应用实例---menu5.6.6菜单系统选项#2菜单容器非菜单容器73菜单系统一般菜单可撕下菜单帮助菜单类MenuBar选项#1菜5.6各种构件的应用实例---menu创建菜单条mb=newMenuBar();setMenuBar(mb);(类Frame中的方法)创建菜单menu1=newMenu(“file”);menu2=newMenu(“edit)mb.add(menu1);mb.add(menu2);editfile745.6各种构件的应用实例---menu创建菜单条创建菜单e5.6各种构件的应用实例---menu创建菜单项mi1=newMenuItem(“new”);mi2=newMenuItem(“open”);mi3=newMenuItem(“save”);mi4=newMenuItem(“close”);menu1.add(mi1);menu1.add(mi2);editFileNewopenSaveClose755.6各种构件的应用实例---menu创建菜单项editF5.6各种构件的应用实例---menu如何处理事件publicbooleanaction(Evente,Objectarg){if(e.targetinstanceofMenuItem){MenuItemselected=(MenuItem)e.trget;trings=selected.getLabel();switch(s){case“new”:….;case“open”:….;case“save”:….;case“close”:….;}}}765.6各种构件的应用实例---menu如何处理事件765.6各种构件的应用实例---menu在处理菜单事件时应该注意的事情是:判断层次MenuContaineruplevel;(定义一个菜单容器)MenuItemtarget=(MenuItem)evt.target;(当前被选中的对象)uplevel=target.getParent();strMessage=uplevel.getLabel()(得到上一级容器的标签)AA775.6各种构件的应用实例---menu在处理菜单事件时应5.6各种构件的应用实例---menupublicbooleanaction(Eventevt,Objectarg){StringstrMessage;if(evt.targetinstanceofMenuItem){MenuItemtarget=(MenuItem)evt.target;MenuContaineruplevel;uplevel=target.getParent();while(uplevelinstanceofMenu){strMessage=((Menu)uplevel).getLabel()+strMessage; uplevel=((Menu)uplevel).getParent();}strMessage="youselected"+strMessage;taMessage.appendText(strMessage);returntrue;}elsereturnfalse;}785.6各种构件的应用实例---menupublicboo5.6各种构件的应用实例---menuJava1.1处理菜单的方法两个主要的策略:1.让每个菜单项有一个唯一的监听器2.将一个大的监听器用于用于所有菜单项795.6各种构件的应用实例---menuJava1.1处理菜5.6各种构件的应用实例---menuclassExample{classMenuFileOpenimplementsActionListener{publicvoidactionPerformed(ActionEvente){openFile(e.getActionCommand());}}classMenuFileSaveimplementsActionListener{publicvoidactionPerformed(ActionEvente){saveFile(e.getActionCommand());}}805.6各种构件的应用实例---menuclassExam5.6各种构件的应用实例---menupublicvoidinit(){MenuItemOpenItem=newMenuItem(“Open…”);OpenItem.addActionListener(newMenuFileOpen());MenuItemSaveItem=newMenuItem(“Save…”);SaveItem.addActionListener(newMenuFileSave());}815.6各种构件的应用实例---menupublicvoi5.6各种构件的应用实例--综合练习设计用户界面可根据用户选择办理银行业务Bankapp\Bankapp.class---f2.bat控制流程825.6各种构件的应用实例--综合练习设计用户界面可根据用户5.6各种构件的应用实例--综合练习classBank{longbalance;

publicBank(){balance=50;}

publicvoiddeposite(longamount){if(amount>0.0){balance+=amount;}}

voidwithdrawal(longamount){if(amount>0.0&&amount<=balance){balance-=amount;}}

publiclongshow_balance(){return(long)balance;}}835.6各种构件的应用实例--综合练习classBank8publicclassBankDemo{ publicstaticvoidmain(Stringagrs[]) { Bankaccount1=newBank(); Bankaccount2=newBank();account1.deposite(100); account2.withdrawal(50); account1.show_balance();account2.show_balance(); }}5.6各种构件的应用实例--综合练习84publicclassBankDemo5.6各种构件的5.6各种构件的应用实例--综合练习WelCometoBank100ShownbalanceCreateaccountDepositWithdrawal855.6各种构件的应用实例--综合练习WelCometo主类Bankapp(Frame的子类)辅类BankBank()创建账户show_balancediposite()withdrawal()main()定义并显示窗口Bankapp()布局安排handleEvent()关闭窗口action()根据按钮做处理辅类WarningboxWarningbox(Stringstr)布局安排,显示对话框显示警告信息action()关闭对话框它是模态的不满足Bank要求满足Bank要求5.6各种构件的应用实例--综合练习86主类Bankapp辅类BankBank()show_bal5.6各种构件的应用实例--综合练习publicstaticvoidmain(Stringargs[]){Bankappframe=newBankapp();frame.setTitle("BankApplication");frame.resize(200,200);frame.show();}875.6各种构件的应用实例--综合练习publicstat5.6各种构件的应用实例--综合练习publicBankapp(){setLayout(newGridLayout(6,1));Labellb=newLabel("welcometoBank",Label.CENTER);tf=newTextField("0",15);add(lb);add(tf);b1=newButton("createaccount");add(b1);b2=newButton("showbalance");add(b2);b3=newButton("diposite");add(b3);b4=newButton("withdrawal");add(b4);resize(450,100);}885.6各种构件的应用实例--综合练习publicBankpublicbooleanhandleEvent(Eventevt){switch(evt.id){caseEvent.WINDOW_DESTROY:dispose();System.exit(0);returntrue;caseEvent.ACTION_EVENT: returnaction(evt,evt.arg);default: returnsuper.handleEvent(evt);}}5.6各种构件的应用实例--综合练习89publicbooleanhandleEvent(Eve5.6各种构件的应用实例--综合练习publicbooleanaction(Eventevt,Objectarg){if(evt.targetinstanceofButton){StringtargetLabel=tf.getText();longamount=Long.valueOf(targetLabel).longValue();if(arg=="diposite"){if(!haveAccount){wb=newWarningBox(this,"createaaccountfirst!");wb.show(); }else{if(amount==0) {wb=newWarningBox(this,”needtheamount"); wb.show(); } else{bank.deposite(amount);tf.setText("0");}}returntrue; }returnfalse;}905.6各种构件的应用实例--综合练习publicbool5.6各种构件的应用实例--综合练习publicWarningBox(Frameparent,Stringstr){super(parent,"Warning!",true);Panelpanel=newPanel();panel.setLayout(newGridLayout(2,1));panel.add(newLabel(str,Label.CENTER));panel.add(newButton("OK"));add(info_panel);}publicbooleanaction(Eventevt,Objectarg){if(evt.targetinstanceofButton){this.dispose();returntrue;}returnfalse;}915.6各种构件的应用实例--综合练习publicWarn5.6各种构件的应用实例--综合练习classBank{longbalance;publicBank(){balance=50;}publicvoiddeposite(longamount){if(amount>0.0){balance+=amount;}}

voidwithdrawal(longamount){if(amount>0.0&&amount<=balance){balance-=amount;}}publiclongshow_balance

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论