第五章 构成用户界面窗口环境_第1页
第五章 构成用户界面窗口环境_第2页
第五章 构成用户界面窗口环境_第3页
第五章 构成用户界面窗口环境_第4页
第五章 构成用户界面窗口环境_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1 第5章构成用户界面的窗口环境 北京大学计算机系代亚非 2 构成用户界面的窗口环境 5 1使用AWT AbstractWindowToolkit 构件5 2包含构件的构件 构件容器 container 5 3事件的传递5 4各种构件的应用实例 一 5 5外观的管理与控制5 6各种构件的应用实例 二 5 7总结 3 5 1使用AWT构件 在AWT的概念中 窗口系统所显示的各种对象统称为构件 Button Menu List等等都是构件 Component是代表构件最基本的类 Component类中定义了各种窗口对象中最基本 最重要的方法和性质 随时随处都有可能利用Component定义的方法 4 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 size 5 列表 按钮 菜单 container 另一个窗口 窗口 对话框 5 2包含构件的构件 构件容器 container container 6 5 2包含构件的构件 构件容器 container importjava awt importjava applet Applet publicclassCountClickextendsApplet intCurrentMarks 0 publicinit Buttonb1 newButton 按钮 add b1 按钮 7 5 2包含构件的构件 构件容器 container AWT使用Container类来定义最基本的构件容器 它有两个子类 Window类和Panel类 在Window类还有两个子类1 定义对话框 用Dialog子类 Java还提了一个Dialog的子类 FileDialog 用它生成文件对话框2 定义一般意义的窗口 用Frame类 8 5 2包含构件的构件 构件容器 container Panel干什么用的呢 使你更方便的组织你的构件 得到赏心悦目的布局Applet是Panel的子类 因此在小应用程序里可以直接加入构件 而一般的应用程序必须先定义构件容器 小应用程序在浏览器中所显示的区域就是Panel 所占的尺寸就是缺省得Panel尺寸 9 Container Window Panel Component Frame Dialog FileDialog Applet 5 2包含构件的构件 构件容器 container Button Menu Checkbox Textfield 10 5 3事件的传递 1 02 当动作发生在按钮上时 首先看按钮这个类有没有action方法 如果没有则看包含按钮的容器类 即panel 有没有action方法 如果没有事件就传递窗口 如果没有就传递给component的通用处理方法 如果程序中没有定义任何action方法 实际上事件最终不被处理 11 classMyPanelextendsPanel MyBtnb newMyBtn ok add b booleanaction classMyClassextendsFrame MyPanelp newMypanel add p Buttonb newButton exit add b booleanaction 窗口 exit classMyBtnextendsButton booleanaction returntrue 12 5 3事件的传递 1 02 事件由包含层次由内向外传递 每个处理事件的方法要有一个返回值 通知是否继续向上传递booleanaction Eventevt Objectarg returntrue 13 5 3事件的传递 1 1 14 确定 取消 5 4各种构件的应用实例 按钮 Button类功能 创建按钮事件创建一个ButtonButtonmyButton newButton str 将button放到窗口系统中 add newButton 确定 add newButton 取消 Button类的常用方法getLabelsetLabel 15 action 接受动作事件 调用repaint init 建立button paint 显示文字 5 4各种构件的应用实例 按钮 处理button产生的事件例 创建一个按钮 每当按下它时 在屏幕显示文字 singlebutton html 想一想 应该有哪些类 Button Font 应有哪些方法 16 importjava awt importjava applet Applet publicclassbuttonextendsApplet Fontfont Buttonb1 publicvoidinit font newFont TimesRoman Font BOLD 20 b1 newButton push add b1 setFont font 5 4各种构件的应用实例 按钮 17 5 4各种构件的应用实例 按钮 booleanaction Eventevt Objectarg y 5 repaint returntrue paint Graphicsg g drawString Button 10 y 18 5 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 19 5 4各种构件的应用实例 一般步骤 20 5 4各种构件的应用实例 NewCheckbox 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 21 5 4各种构件的应用实例 CheckBox 应用举例建立三个复选框 被选中者的标签内容变成 changes 应有的类 Checkbox应有的方法 init 建立复选框action 接受动作事件setLabel 22 5 4各种构件的应用实例 CheckBox importjava 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 23 publicbooleanaction 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各种构件的应用实例 CheckBox 24 例 在文本行中输入 并用字符串接受 显示出来类的数据构成 Textfield Button String类的方法构成 init action 接受按钮事件 调用paint paint 用getText 方法得到输入内容 并显示 5 4各种构件的应用实例 TextField 25 importjava awt publicclasstextfieldkeyextendsjava applet Applet TextFieldt Strings Buttonbutton publicvoidinit t newTextField 25 add t button newButton getText add button 5 4各种构件的应用实例 TextField 26 publicbooleanaction Eventevt Objectarg if evt targetinstanceofButton repaint returntrue publicvoidpaint Graphicsg s t getText g drawString s 40 80 5 4各种构件的应用实例 TextField 27 0 1 2 4 3 5 4 0 1 5 3 4 5 5外观的管理与制 28 5 5外观的管理与制 Panel类 面板 功能 容纳其他对象 安排合理布局创建面板 PanelmyPanel newPanel add myPanel 将面板作为容器 mypanel add button 29 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 30 5 5外观的管理与制 BorderLayout类功能 Applet分成五个区创建setLayout newBorderLayout 将其他构件加入add East newButton 东 add South newButton 南 add West newButton 西 add North newButton 北 add Center newButton 中 31 5 5外观的管理与制 FlowLayout类缺省的输出管理器GridLayout类GridLayoutmylayout newGridLayout 3 3 0 0 setLayout rows cols hspace vspace 32 5 5外观的管理与制 GridBagLayout类和GridBagConstraints类功能 借助于GridBagConstraints类 实现更灵活的外观管理每个构件后都跟随一个GridBagLayout对象实体 来决定构件的外观 创建GridBagLayoutmyLayout newGridBagLayout 33 5 5外观的管理与制 GridBagConstraints类的约束条件gridwidth gridheight gridx gridy weightx weighty ipadx ipady insetsfill及其设置GridBagConstraints NONEGridBagConstraints HORIZONTALGridBagConstraints VERTICALGridBagConstraints BOTHGridBagConstraints RELATIVE 34 5 5外观的管理与制 例 GridBagApplet html 35 5 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 36 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 37 5 5外观的管理与制 GBC gridwidth GridBagConstraints REMAINDER 表示该按钮独占一行 layout setConstraints button4 GBC add button4 38 5 5外观的管理与制 GBC gridwidth 2 表示该按钮占两个单元 layout setConstraints button5 GBC add button5 GBC gridwidth GridBagConstraints REMAINDER layout setConstraints button6 GBC add button6 39 5 5外观的管理与制 GBC gridwidth 1 GBC gridheight 2 高度为两个单元 layout setConstraints button7 GBC add button7 40 5 5外观的管理与制 GBC gridwidth GridBagConstraints REMAINDER GBC gridheight 1 layout setConstraints button8 GBC add button8 layout setConstraints button9 GBC add button9 41 5 6各种构件的应用实例 Canvas 5 6 2Canvas类 画布 功能 制作其他构件 通常用来放置图形图像 或绘图 画图可以直接在applet区域上进行 定义了Canvas对象后将paint 语句作为该对象的方法 这些动作就自动发生在画布区 通常不需要处理画布上发生的事件创建Canvascanvas newCanvas add canvas 42 5 6各种构件的应用实例 Canvas 例 根据程序说出运行结果注意一个程序中生成一个canvas类的实例 另一个程序没有 43 5 6各种构件的应用实例 Canvas importjava 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 44 5 6各种构件的应用实例 Canvas importjava awt importjava applet publicclasscanvas testextendsApplet MyCanvasmycanvas newMyCanvas publicvoidinit setLayout newBorderLayout add Center mycanvas add North newButton button1 add East newButton button4 45 5 6各种构件的应用实例 Canvas classMyCanvasextendsCanvas publicvoidpaint Graphicsg g setColor Color red g fillRect 0 0 50 100 g setColor Color blue g fillRect 30 0 100 40 46 5 6各种构件的应用实例 Canvas 47 color color color 5 6各种构件的应用实例 Canvas 例 按动鼠标改变画布的颜色 CanvasApplet 有哪些类 Canvas Button Color 哪些方法 init action swapColor paint 48 classCanvasAppletextendsApplet MyCanvasmycanvas newMyCanvas publicvoidinit setLayout newBorderLayout Buttonbutton newButton Color add North button add Center mycanvas resize 200 250 5 6各种构件的应用实例 Canvas 49 5 6各种构件的应用实例 Canvas booleanaction Eventevt Objectarg if arg Color mycanvas swapColor returntrue 50 5 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 elsecolor Color black repaint 51 5 6各种构件的应用实例 Frame 5 6 3Frame类功能 制作一般的独立窗口 它是构件容器创建FramefmInstance newFrame 或FramefmInstance newFrame Thewindowfortest 将其显示到屏幕上fmInstance show 注意 不用add 52 5 6各种构件的应用实例 Frame 常用的方法dispose getCursorType getIconImage getMenuBar getTitle isResizable setCursor setIconImage setMenuBar setResizable setTitle窗口的相关事件 Event WINDOW DEICONIFY DESTROY EXPOSE ICONIFY MOVED 53 5 6各种构件的应用实例 Frame 例 创建一个窗口 并用按钮控制它的显示或隐藏FrameApplet Showwindow hidewindow Showwindow 54 5 6各种构件的应用实例 Frame 在applet中action处理Button的事件 55 5 6各种构件的应用实例 Frame 为了将字符显示在自定义窗口中 包含输出语句的方法必须在自定义的窗口类中 关闭窗口的事件在窗口类本身处理 注 处理窗口中的事件用handelEvent publicbooleanhandleEvent Eventevt switch evt id caseEvent WINDOW DESTROY dispose System exit 0 default returnsuper handleEvent evt 56 5 6各种构件的应用实例 Frame publicclassFrameAppletextendsApplet 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 57 5 6各种构件的应用实例 Frame classCustomFrameextendsFrame 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 58 button2 button1 Button110button21 button2 button1 Button10button27 5 6各种构件的应用实例 Frame 多窗口 FrameApplet ButtonsFrames class f1 bat 59 5 6各种构件的应用实例 Frame 1 一个窗口类创建两个实例2 由于有不同的事件发生 按钮 关窗口 因此事件先由通用事件处理程序来接收 然后再根据情况做相应的处理 switch evt id caseEvent WINDOW DESTROY dispose returntrue caseEvent ACTION EVENT returnaction evt evt arg default returnsuper handleEvent evt 60 5 6各种构件的应用实例 Frame 3 任何时候只有一个窗口是活动的 active 的因此不必考虑那个判断是哪一个窗口发生的事件4 一般的结构在main 中 只做与窗口有关的事情 创建窗口 显示窗口在构造方法中 安排窗口中的构件 61 5 6各种构件的应用实例 Frame importjava 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 62 5 6各种构件的应用实例 Frame ButtonsInFrames 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 63 5 6各种构件的应用实例 Frame publicbooleanaction 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 64 5 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 DESTROY handleEventLIST SELECT 65 5 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 66 对窗口来说只有一个事件 5 6各种构件的应用实例 练习 publicbooleanhandleEvent Eventevt switch evt id caseEvent WINDOW DESTROY dispose System exit 0 default returnsuper handleEvent evt 67 对右边的文本区设置属性 利用引用传递 得到列表选项用getItem事件处理用用handleEvent 得到两个参数 字型 字号 5 6各种构件的应用实例 练习 在panel中创建两个列表往列表中加入条目用additem str voidupdateFontShower area setFont newFont CurrentFontName Font PLAIN CurrentSize 68 5 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 69 5 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 70 updateFontShower area setFont param1 param2 param3 5 6各种构件的应用实例 练习 classFontPanelextendsPanel intCurrentSize 20 StringCurrentFontName TextAreaarea ListFontSelector SizeSelector 71 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 72 5 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 73 菜单系统 一般菜单 可撕下菜单 帮助菜单 类MenuBar 选项 1 菜单中的菜单 选项 3 选项 4 选项 1 选项 2 第三层菜单 选项 3 选项 1 选项 2 类Menu 类MenuItem 5 6各种构件的应用实例 menu 5 6 6菜单系统 选项 2 菜单容器 非菜单容器 74 5 6各种构件的应用实例 menu 创建菜单条mb newMenuBar setMenuBar mb 类Frame中的方法 创建菜单menu1 newMenu file menu2 newMenu edit mb add menu1 mb add menu2 75 5 6各种构件的应用实例 menu 创建菜单项mi1 newMenuItem new mi2 newMenuItem open mi3 newMenuItem save mi4 newMenuItem close menu1 add mi1 menu1 add mi2 76 5 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 77 5 6各种构件的应用实例 menu 在处理菜单事件时应该注意的事情是 判断层次 MenuContaineruplevel 定义一个菜单容器 MenuItemtarget MenuItem evt target 当前被选中的对象 uplevel target getParent strMessage uplevel getLabel 得到上一级容器的标签 78 5 6各种构件的应用实例 menu publicbooleanaction 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 79 5 6各种构件的应用实例 menu Java1 1处理菜单的方法两个主要的策略 1 让每个菜单项有一个唯一的监听器2 将一个大的监听器用于用于所有菜单项 80 5 6各种构件的应用实例 menu classExample classMenuFileOpenimplementsActionListener publicvoidactionPerformed ActionEvente openFile e getActionCommand classMenuFileSaveimplementsActionListener publicvoidactionPerformed ActionEvente saveFile e getActionCommand 81 5 6各种构件的应用实例 menu publicvoidinit MenuItemOpenItem newMenuItem Open OpenItem addActionListener newMenuFileOpen MenuItemSaveItem newMenuItem Save SaveItem addActionListener newMenuFileSave 82 5 6各种构件的应用实例 综合练习 设计用户界面可根据用户选择办理银行业务Bankapp Bankapp class f2 bat控制流程 83 5 6各种构件的应用实例 综合练习 classBank longbalance publicBank balance 50 publicvoiddeposite longamount if amount 0 0 balance amount voidwithdrawal longamount if amount 0 0 84 publicclassBankDemo publicstaticvoidmain Stringagrs Bankaccount1 newBank Bankaccount2 newBank account1 deposite 100 account2 withdrawal 50 account1 show balance account2 show balance 5 6各种构件的应用实例 综合练习 85 5 6各种构件的应用实例 综合练习 WelCometoBank 100 Shownbalance Createaccount Deposit Withdrawal 86 主类Bankapp Frame的子类 辅类Bank Bank 创建账户 show balance diposite withdrawal main 定义并显示

温馨提示

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

评论

0/150

提交评论