北京大学JAVA讲义-第五章 构成用户界面的窗口环境-免_第1页
北京大学JAVA讲义-第五章 构成用户界面的窗口环境-免_第2页
北京大学JAVA讲义-第五章 构成用户界面的窗口环境-免_第3页
北京大学JAVA讲义-第五章 构成用户界面的窗口环境-免_第4页
北京大学JAVA讲义-第五章 构成用户界面的窗口环境-免_第5页
已阅读5页,还剩33页未读, 继续免费阅读

下载本文档

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

文档简介

构成用户界面的窗口环境北京大学Java语言程序设计·第五章Contents目录构成用户界面的窗口环境01GUI基础概述与发展历程02AWT层次结构与核心类03五大布局管理器详解04常用界面组件与容器05事件驱动与交互处理Chapter01GUI基础概述与发展历程从命令行到图形界面,理解用户交互范式的演进GraphicalUserInterface什么是图形用户界面(GUI)图形用户界面(GUI)通过窗口、图标、菜单和指针设备(WIMP范式)实现人机交互,将命令行时代的文本记忆型操作转化为视觉直觉型操作,是计算机软件走向大众化的关键技术突破。AppleMacintosh—图形界面个人电脑的商业化里程碑GUI(GraphicalUserInterface)允许用户通过鼠标点击、拖拽、键盘输入等直观方式与程序交互,取代了命令行界面需要记忆精确指令的操作模式。INTUITIVEWIMP范式是GUI的核心交互模型,包含窗口(Window)、图标(Icon)、菜单(Menu)和指针(Pointer)四大元素,至今仍是桌面应用的主流交互框架。W.I.M.P.Java提供AWT和Swing两套GUI工具包:AWT依赖操作系统原生组件实现,Swing则用纯Java绘制,具备跨平台一致性和更丰富的组件库。AWT+SWINGInterfaceEvolution用户界面的发展历程用户界面从CLI命令行演进到GUI图形界面再到触控自然交互,每一次范式转换都大幅降低了人机交互的认知门槛。Java的AWT/Swing体系诞生于GUI黄金时代,至今仍是桌面应用开发的重要基础。1960s命令行时代命令行时代(CLI)用户必须记忆精确的文本命令才能操作计算机,如DOS的dir、cd等指令,学习曲线陡峭,仅适合专业技术人员使用1984图形界面时代图形界面时代(GUI)1984年苹果Macintosh开创商用GUI先河,1995年Windows95将GUI推向大众,JavaAWT于同年发布以支持跨平台图形界面开发2007触控交互时代触控与自然交互时代2007年iPhone引领触控革命,手势操作、语音交互、AR/VR等新范式不断涌现,但桌面GUI仍是企业应用和开发工具的核心交互形态JavaGUIProgrammingJavaGUI编程的两代工具包AWT与Swing是JavaGUI编程的两大基石:AWT提供底层架构和事件模型,Swing以纯Java实现轻量级组件,两者互补共存。AWT(AbstractWindowToolkit)01Java1.0引入的原始GUI工具包,位于java.awt包中,采用重量级组件设计,每个组件依赖操作系统原生窗口资源(Peer)实现渲染02跨平台表现受限于各操作系统共有的"最小功能交集",组件外观随运行平台变化,但事件模型和布局管理器设计优秀,被Swing完整继承Swing(javax.swing)01Java1.2引入的高级GUI工具包,位于javax.swing包中,采用轻量级组件设计,完全用Java代码绘制,不依赖操作系统原生资源02提供丰富的组件库(JTable、JTree、JTabbedPane等),支持可插拔外观(PLAF),可在运行时切换不同平台的视觉风格CHAPTER02AWT层次结构与核心类剖析Component、Container、Window等核心类的继承体系ClassHierarchyAWT核心类的继承层次AWT采用经典的面向对象继承体系,以Component为根节点构建了一棵组件树:Component定义了所有可视元素的共性,Container赋予容纳子组件的能力,Window/Frame/Dialog则逐层扩展为独立窗口,这种层次化设计让组件复用和嵌套组合变得自然优雅。01Component基类所有AWT可视化组件的基类,定义了坐标、宽高、前景色/背景色、字体、可见性等通用属性,以及paint()、repaint()等核心绘制方法02Container容器继承自Component,提供add()/remove()方法管理子组件,通过LayoutManager控制排列方式,是实现复杂界面的基础03Window/Frame窗口Window代表无边框独立顶层窗口;Frame扩展为带标题栏、边框和菜单栏的标准应用程序窗口04Dialog/PanelDialog创建可模态对话框;Panel是最常用的中间容器,用于在窗口内划分功能区域类继承关系白板教学示意ComponentAPIComponent基类的核心APIComponent类为所有GUI组件定义了统一的操作接口,涵盖几何定位、外观渲染、可见性控制和事件响应四大维度,掌握这些基类方法即可对所有AWT/Swing组件进行通用操控。几何定位与尺寸控制setBounds(x,y,width,height)一步完成位置和大小设置,是布局管理中最常用的方法。getSize()返回Dimension对象封装宽高,便于获取当前组件尺寸。getLocation()返回Point对象封装坐标,精确控制组件在容器中的位置。setBounds·Dimension·Point外观渲染与字体设置setForeground()设置组件的前景颜色,影响文字和图形绘制。setBackground()设置组件的背景色,参数为Color对象支持RGB模式。setFont()设置显示字体,支持字体名称、样式(粗体/斜体)和大小配置。Color·Font可见性与交互状态setVisible(boolean)控制组件在界面中的显示或隐藏状态切换。setEnabled(boolean)控制组件是否响应用户交互,禁用后呈灰色显示。repaint()请求系统重新绘制组件,在动态更新界面时尤为重要。setVisible·repaint()AWT·ComponentHierarchyContainer容器与布局管理基础Container类在Component的基础上赋予组件"容纳子组件"的能力,通过add()/remove()实现组件的动态增删,并通过LayoutManager属性将布局策略委托给专门的布局管理器,实现了"容器结构"与"排列策略"的解耦,这是AWT架构设计中最精妙的职责分离之一。俄罗斯套娃——隐喻Container的嵌套容纳特性01动态增删:add(Componentcomp)将子组件添加到容器中,remove(Componentcomp)移除指定组件,removeAll()清空所有子组件,getComponentCount()返回当前子组件数量。02布局委托:setLayout(LayoutManagermgr)设置布局管理器,Frame默认BorderLayout,Panel默认FlowLayout,设为null则启用手动绝对定位。03嵌套结构:容器可多层嵌套——Frame内放Panel,Panel内再放其他Panel或组件,通过嵌套实现复杂界面结构,是构建专业级GUI的基本手法。04刷新机制:validate()在动态添加或移除组件后调用,通知容器重新计算布局并刷新显示,是动态修改界面时必须执行的步骤。AWT·窗口编程Frame:标准应用程序窗口Frame是AWT中创建独立桌面窗口的核心类,它提供了标题栏、边框、菜单栏等标准窗口元素。创建Frame遵循"实例化→配置属性→添加组件→显示"的标准流程,理解这一流程是开发所有Java桌面应用的第一步。创建四步流程:newFrame(title)实例化→setSize()/setLocation()设置几何属性→add()添加组件→setVisible(true)显示窗口默认不可见且零尺寸:必须显式设置尺寸(setSize或setBounds)并调用setVisible(true),否则窗口不会出现在屏幕上窗口外观控制:setResizable(boolean)控制是否允许拖拽调整大小;setIconImage(Image)设置标题栏与任务栏图标窗口事件监听:WindowListener接口监听七种状态事件,windowClosing是实现"点击关闭退出程序"的关键入口Frame创建的桌面窗口应用示例JAVAAWTPanel:最灵活的中间容器Panel是AWT中最常用的中间容器,它不能独立显示但具备独立布局能力,通过嵌套组合和布局切换实现界面的模块化分区。核心特性Panel继承自Container,默认使用FlowLayout布局管理器,不能独立显示,必须嵌入Frame、Dialog或其他Panel等顶层或中间容器中才能呈现核心特性每个Panel可独立设置布局管理器,使同一窗口内不同区域可采用不同布局策略,例如顶部用BorderLayout、中部用GridLayout、底部用FlowLayout使用场景将"确定/取消/应用"等按钮组合在底部Panel,将表单输入项组织在中部Panel,实现界面的模块化与职责分离使用场景外层Panel用BorderLayout划分五个区域,每个区域再放一个GridLayout的Panel,实现复杂的混合布局效果Panel嵌套布局示意NORTHWESTCENTER·GridLayoutEASTSOUTH·FlowLayout确定取消应用外层BorderLayout划分五区,各区嵌套独立Panel并切换布局CHAPTER03五大布局管理器详解FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout的原理与实践LayoutManagers五种布局管理器总览Java的五种布局管理器覆盖了从简单线性排列到复杂网格定位的全部场景,掌握这五种布局就能应对绝大多数界面设计需求。积木方块隐喻:布局管理器对容器空间的划分与分配01FlowLayout组件从左到右依次排列,满行自动换行,是Panel的默认布局,适合按钮组等简单横向排列02BorderLayout分为North/South/East/West/Center五区,Center自动填充剩余空间,是Frame的默认布局03GridLayout将容器等分为指定行×列的网格,每个单元格大小相同,适合计算器键盘等等分布局04GridBagLayout最灵活的布局管理器,允许跨行跨列、不等分空间,通过GridBagConstraints精确控制05CardLayout多组件像卡片叠放,同一时刻只显示一张,通过show/next/previous切换,适合向导与选项卡LAYOUTMANAGERFlowLayout流式布局详解FlowLayout以"自然流"的方式排列组件——从左到右依次放置,空间不足时自动折行。它是最简单的布局管理器,也是Panel的默认布局。构造方法与参数FlowLayout()默认居中对齐,5像素间距FlowLayout(align)指定对齐方式:LEFT/CENTER/RIGHT/LEADING/TRAILINGFlowLayout(align,hgap,vgap)同时指定对齐方式与水平、垂直间距3种构造核心行为特征组件按add()顺序从左到右排列,空间不足时自动折行;每个组件保持首选尺寸,不被拉伸或压缩容器宽度变化时自动重新排列分布;可通过setAlignment()、setHgap()、setVgap()动态调整自适应折行典型应用场景对话框按钮组—确定/取消按钮的底部横排工具栏图标—功能按钮的横向排列简单表单—标签与输入框的横向组合Panel默认LAYOUTMANAGERBorderLayout边界布局详解BorderLayout以方位概念将容器划分为五个区域,每个区域具有独特的伸缩特性,Center区域的自动填充使其成为放置核心内容的天然选择。城市区域划分—BorderLayout的五方位空间隐喻01North/South拉伸至容器宽度、保持组件首选高度;East/West拉伸至容器高度、保持首选宽度;Center自动填充所有剩余空间02add(comp,constraints)中constraints参数指定区域,取值NORTH/SOUTH/EAST/WEST/CENTER,未指定时默认为CENTER03某方位未添加组件时,相邻区域自动扩展占据空位;例如不设North和South,East/West/Center会延伸至容器顶部和底部04构造方法BorderLayout(hgap,vgap)设置水平与垂直间距,默认0像素,区域紧密贴合LayoutManagerGridLayout网格布局详解GridLayout将容器均匀划分为指定行列数的等大网格,每个组件占据一个单元格并被拉伸填满。它的"等分"特性使其成为计算器键盘、日历视图、图片缩略图等规则排列场景的理想选择,但无法实现不等分的复杂布局。构造方法与网格规则行列指定—rows=0时列固定、行自动计算;cols=0时行固定、列自动计算;两者不可同时为0间距控制—通过hgap/vgap参数指定单元格水平和垂直间距,默认为0像素rows×cols空间分配与组件行为等大拉伸—所有单元格大小相同,组件被拉伸填满单元格,preferredSize被忽略自动扩展—组件按add()顺序从左到右、从上到下填入;超出时自动增加列数preferredSize无效典型应用场景计算器键盘—4×4标准数字键盘布局,运算符与数字键等分排列,界面规整统一日历视图—6×7日期网格展示整月日期,星期标题与日期格子对齐,视觉层次清晰缩略图展示—图片缩略图、颜色选择器色块等需要规整等分排列的界面元素4×4·6×7LayoutManagerGridBagLayout网格袋布局详解GridBagLayout是AWT中最灵活也最复杂的布局管理器,通过GridBagConstraints对象为每个组件精确指定位置、跨度、权重和填充方式,能实现不规则网格和响应式布局。精密制图—隐喻GridBagLayout的精确空间控制01定位参数:gridx/gridy指定组件所在行列(从0开始),gridwidth/gridheight指定跨越数,REMAINDER表示延伸到最后02权重分配:weightx/weighty控制窗口缩放时额外空间分配比例,权重为0不扩展,越大获得越多剩余空间03填充与对齐:fill控制填充方式(NONE/HORIZONTAL/VERTICAL/BOTH),anchor控制小于单元格时的对齐位置04间距控制:insets设置组件与单元格四边间距,ipadx/ipady在首选尺寸基础上增加内部填充像素LAYOUTMANAGERCardLayout卡片布局详解CardLayout以"卡片堆叠"的方式管理多个组件,同一时刻只显示一张"卡片",通过名称标识和导航方法实现页面切换。名称绑定add(Componentcomp,Stringname)添加卡片时绑定一个字符串名称标识,show(Containerparent,Stringname)通过名称切换显示指定卡片。add()·show()顺序导航next(parent)/previous(parent)按添加顺序向前/向后切换,first(parent)/last(parent)跳至首张/末张卡片,所有切换操作都是循环的。next()·previous()构造方法CardLayout()使用默认0间距;CardLayout(inthgap,intvgap)指定卡片与容器边缘的水平和垂直间距。hgap·vgap典型场景软件安装向导的步骤页面切换、用户注册的多步骤表单、设置面板的分类页面——任何需要在同一区域按条件显示不同内容的场景都适用。向导·表单·选项卡BESTPRACTICES布局管理器的选择策略与最佳实践布局管理器的选择应遵循"简单优先、组合使用、避免绝对定位"三大原则。实际开发中通常需要将Frame的BorderLayout与多个Panel的不同布局嵌套组合,通过层次化容器结构实现复杂界面。简单优先原则:能用FlowLayout解决的不用GridLayout,能用GridLayout的不用GridBagLayout,代码复杂度直接影响可维护性。SIMPLE组合嵌套策略:外层Frame用BorderLayout划分大区域,内嵌Panel使用FlowLayout/GridLayout,2-3层嵌套即可实现大多数界面。NEST避免绝对定位:setLayout(null)手动设置setBounds()会导致缩放错位、DPI异常与跨平台兼容性问题,仅在教学演示中使用。NOABS响应式设计意识:合理设置weightx/weighty权重和fill填充参数,确保窗口缩放时组件自适应调整,提升用户体验。FLEX建筑平面图的层次化分区思维,与布局管理器的嵌套组合策略异曲同工CHAPTER04常用界面组件与容器按钮、文本框、选择框、列表、菜单等核心交互组件的用法与配置AWTComponentsButton按钮与Label标签组件Button和Label是GUI中最基础的交互与显示组件:Label提供静态文本展示用于界面标注,Button响应用户点击触发业务逻辑。它们虽然简单,但几乎出现在每一个GUI程序中,是理解Java事件驱动编程的起点。LabelLabel标签组件01Label()创建空标签;Label(Stringtext)创建指定文本标签;Label(Stringtext,intalignment)同时指定对齐方式(LEFT=0/CENTER=1/RIGHT=2)02setText()/getText()动态修改和获取标签文本;setAlignment()运行时更改对齐方式;Label不响应ActionEvent,仅用于信息展示ButtonButton按钮组件01Button()创建空按钮;Button(Stringlabel)创建带文字标签的按钮;setLabel()动态修改按钮文字;setActionCommand()设置事件标识字符串02addActionListener(ActionListenerl)注册点击事件监听器,按钮被点击时触发actionPerformed(ActionEvente)回调,e.getActionCommand()获取命令字符串AWTCOMPONENTSTextField与TextArea文本组件TextField和TextArea分别处理单行和多行文本输入,是表单数据采集和文本编辑的核心组件。TextField单行文本框处理单行文本输入与密码掩码场景构造与访问:TextField(intcolumns)指定显示列数宽度;setText()/getText()设置和获取输入内容安全与控制:setEchoChar('*')掩码密码输入;setEditable(false)只读;addActionListener()监听回车事件setEchoChar()TextArea多行文本域多行编辑与滚动条,简易文本编辑器基础构造配置:指定文本、行列数和滚动条策略:SCROLLBARS_BOTH/VERTICAL_ONLY/HORIZONTAL_ONLY/NONE文本操作:append()末尾追加;insert()指定位置插入;replaceRange()替换指定范围文本append()·insert()·replaceRange()AWTUICOMPONENTS选择类组件:复选框、单选按钮与下拉列表选择类组件提供了三种不同粒度的用户选择机制:Checkbox支持独立多选,CheckboxGroup将多个Checkbox约束为互斥单选,Choice以下拉折叠形式节省界面空间。三者配合ItemListener实现选择状态变化的实时监听。答题卡填涂隐喻:单选互斥与多选的交互差异01Checkbox复选框:通过Checkbox(String,boolean)创建,getState()/setState()读写选中状态,addItemListener()监听ItemEvent.SELECTED/DESELECTED切换事件。02CheckboxGroup单选组:逻辑分组器而非可视化组件,创建后将多个Checkbox通过Checkbox(String,CheckboxGroup,boolean)关联,实现互斥单选效果。03Choice下拉列表:通过add(String)逐项添加选项,getSelectedItem()/getSelectedIndex()获取当前选中项,select()程序化设置选中状态。04Choice适用场景:仅支持单选模式,多选列表应使用List组件;折叠时只占一行高度,展开后显示全部选项,在界面空间受限时特别有用。AWT组件详解List列表与Scrollbar滚动条组件List组件以展开式列表呈现选项并支持多选,弥补了Choice仅能单选的局限;Scrollbar提供精确的数值滑动控制,其value/visible/minimum/maximum四元模型是理解所有滚动容器的基础。CONSTRUCTOR构造方法与基本操作List(introws,booleanmultipleMode)指定可见行数和多选模式;add(Stringitem)添加选项;remove(intindex)/removeAll()删除选项。rows·multipleModeEVENTS选中状态与事件处理getSelectedItem()/getSelectedItems()获取单选与多选结果;select(intindex)程序化选中;双击触发ActionEvent,单击触发ItemEvent。ActionEvent·ItemEventCONSTRUCTOR构造参数与四元模型Scrollbar(intorientation,intvalue,intvisible,intmin,intmax)指定方向(HORIZONTAL/VERTICAL)、当前值、可见量、最小值和最大值。H·V·value·visible·min·maxLISTENER监听器与增量设置addAdjustmentListener()监听拖动事件,AdjustmentEvent.getValue()获取当前值;setUnitIncrement()/setBlockIncrement()设置单位增量和块增量。AdjustmentEventAWTCOMPONENTS菜单系统:MenuBar、Menu与MenuItemJava菜单系统采用MenuBar→Menu→MenuItem三层结构,通过组合方式构建完整的菜单体系。三层组合:newMenuBar()→newMenu('文件')→newMenuItem('新建'),逐层add后通过frame.setMenuBar()挂载,形成完整菜单树逻辑分组:addSeparator()插入分隔线;Menu支持嵌套子菜单,如newMenu('最近文件')后add到父Menu,形成多级级联可勾选项:CheckboxMenuItem继承MenuItem,getState()返回勾选状态,点击时触发ItemEvent而非ActionEvent快捷键绑定:setShortcut(newMenuShortcut(KeyEvent.VK_N))为菜单项绑定Ctrl+N,提升熟练用户操作效率菜单层次组织—如同纸质菜单的分类与嵌套AWTComponentsCanvas画布与Graphics绘图基础Canvas提供了一个空白的自定义绘图区域,通过重写paint(Graphicsg)方法可以调用GraphicsAPI自由绘制几何图形、文字和图像。它是实现自定义可视化的基础组件,掌握Graphics绘图是进阶GUI开发的必经之路。Canvas画布组件继承Canvas类并重写paint(Graphicsg)方法实现自定义绘制;调用repaint()触发系统回调paint()完成画面刷新,不可直接调用paint()Canvas本身不包含任何预定义外观或行为,是纯粹的"空白画板",所有视觉效果完全由开发者通过GraphicsAPI实现Graphics核心绘图API几何绘制:drawLine(x1,y1,x2,y2)画线段、drawRect(x,y,w,h)画矩形、drawOval(x,y,w,h)画椭圆、drawPolygon()画多边形,对应fillXxx()方法实现填充颜色与字体:setColor(Colorc)设置画笔颜色、setFont(Fontf)设置文字字体、drawString(Stringstr,x,y)在指定位置绘制文字、drawImage()绘制图片CHAPTER05事件驱动与交互处理掌握Java委托事件模型,理解事件源、监听器与事件对象的协作机制DelegationEventModelJava委托事件模型(DelegationEventModel)Java的委托事件模型以"事件源-事件对象-监听器"三角关系为核心,这种"谁产生、谁通知、谁处理"的解耦设计让组件逻辑与业务逻辑分离,是GUI交互编程的基石。老式电话交换机——事件分发机制的早期隐喻01事件源(EventSource):产生事件的GUI组件,如被点击的Button、被拖动的Scrollbar、被关闭的Window,每种事件源支持注册特定类型的监听器Button02事件对象(EventObject):封装事件详细信息的对象,如ActionEvent包含命令字符串,MouseEvent包含坐标和点击次数,所有事件类继承自java.util.EventObject封装03事件监听器(EventListener):实现特定Listener接口的对象,如ActionListener的actionPerformed()处理按钮点击,MouseListener处理鼠标交互回调04注册机制:通过事件源的addXxxListener()方法将监听器注册到组件上,事件发生时自动调用回调方法,支持同一事件源注册多个监听器多播JavaGUIEventHandlingActionEvent与ActionListener详解ActionEvent是JavaGUI中最通用的动作事件,由按钮点击、菜单选择、回车确认等多种操作统一触发。通过getSource()和getActionCommand()区分事件来源,是构建交互逻辑的核心入口。触发ActionEvent的组件Button点击、MenuItem选择、TextField按回车键、List双击某项——这四种操作都会触发ActionEvent,统一由ActionListener处理setActionCommand(Stringcmd)可自定义事件命令字符串,默认情况下命令字符串为按钮文字或菜单项文本4种触发源·1个监听器监听器实现方式方式一:窗口类实现ActionListener接口,在actionPerformed()中用if-else按getActionCommand()分发处理,适合按钮较少的简单界面方式二:使用匿名内部类或Lambda表达式为每个组件创建独立监听器,代码局部性更好,适合逻辑独立的复杂界面if-else分发vsLambda独立MouseEventHandling鼠标事件处理:MouseListener与MouseMotionListenerJava将鼠标事件分为离散操作(MouseListener:点击/按下/释放/进入/离开)和连续运动(MouseMotionListener:移动/拖拽)两组,分别由两个接口处理。MouseEvent对象提供坐标、点击次数、按键信息等丰富数据,是实现画板、拖放、悬浮提示等交互的基础。MouseListener五个离散事件mouseClicked()响应完整点击(按下+释放);mousePressed()/mouseReleased()分别响应按下和释放瞬间;mouseEntered()/mouseExited()响应鼠标进入和离开组件区域MouseEvent关键方法:getX()/getY()获取相对坐标,getClickCount()区分单击(1)和双击(2),getButton()判断左/右/中键(BUTTON1/2/3)MouseMotionListener两个连续事件mouseMoved()响应无按键的移动;mouseDragged()响应按住按键的移动(拖拽);两者配合可实现画板绘图、组件拖放、自定义滑块等连续交互适配器简化:MouseAdapter同时实现MouseListener和MouseMotionListener的所有方法,开发者只需重写关心的方法,避免空方法代码冗余EVENTHANDLING键盘事件与窗口事件处理KeyListener通过keyPressed/keyReleased/keyTyped三个方法捕获键盘输入,支持虚拟键码识别功能键和方向键;WindowListener(及其适配器WindowAdapter)管理窗口的完整生命周期事件,其中windowClosing是确保程序正确退出的关键处理点。KeyListener键盘事件三方法分工:keyPressed()在任意键按下时触发,keyReleased()在释放时触发,keyTyped()仅在输入可打印字符时触发(功能键和方向键不触发keyTyped)虚拟键码体系:getKeyCode()返回int型虚拟键码(如VK_ENTER=10、VK_ESCAPE=27、VK_F1=112),getKeyChar()返回char型输入字符,两者配合实现快捷键和游戏控制VK_ENTER·VK_ESCAPE·VK_F1WindowListener窗口事件完整生命周期:七个方法覆盖窗口全周期:Opened/Closing/Closed/Iconified/Deiconified/Activated/Deactivated,其中windowClosing是用户点击关闭按钮时的处理入口适配器简化:WindowAdapter提供所有方法的空实现,开发者只需继承并重写windowClosing(),通常调用System.exit(0)或dispose()完成程序退出System.exit(0)·dispose()JavaEventHandling事件适配器类(Adapter)的妙用适配器类通过提供接口所有方法的空实现,让开发者只需重写关心的少数方法,避免冗余代码适配器类的本质实现监听器接口的抽象类,所有方法提供空实现,开发者继承后只需重写需要的方法。如WindowAdapter实现了WindowListener全部7个方法。常用适配器类对照WindowAdapter→WindowListener,MouseAdapter→MouseListener+MouseMotionListener,KeyAdapter→KeyListener,FocusAdapter→FocusListener。典型用法frame.addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEvente){dispose();}}),一行代码完成窗口关闭处理。Lambda替代方案对于单方法监听器接口(如ActionListener),可用Lambda表达式b.addActionListener(e→doSomething())直接替代,代码更简洁。电源适配器——桥接不同接口的物理隐喻CHAPTER04·GUI综合实例综合实例:登录界面开发一个完整的GUI程序需要将容器、布局、组件和事件四个维度有机组合:Frame提供顶层窗口,BorderLayout划分标题区、表单区和按钮区,Panel嵌套实现各区域的独立布局,ActionListener处理按钮点击逻辑。Frame布局结构BorderLayout分区:North放标题Label居中显示,Center放表单Panel采用GridLayout2×2排列,South放按钮Panel使用FlowLayout面板嵌套:各区域通过独立Panel实现隔离布局,互不干扰BorderLayout组件配置细节密码掩码:调用setEchoChar('*')实现密码输入框的掩码显示效果窗口控制:setResizable(false)固定窗口大小,setSize(300,200)设定合理尺寸setEchoChar登录验证逻辑身份校

温馨提示

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

评论

0/150

提交评论