




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章JavaSwing图形用户界面,202E-mail:zhaojianbang,本章主要内容,10.1java.swing概述10.2窗口10.3文本组件10.4按钮与标签10.5选择性组件10.6布局管理器10.7中间容器10.8事件处理10.9界面开发难点:事件处理,10.1JavaSwing概述,JFC(JavaFoundationClasses)Java基础类库是一个图形框架,由以下三部分组成:AWT(AbstractWindowToolkit)Java抽象窗口工具包SwingJava2DAPI(图形、图像、颜色、文本等)发展历史Java1.0的出现带来了抽象窗口工具箱(AWT)网景通讯公司Netscape开发了InternetFoundationClasses,简称:IFC,并联合Javasoft,在Java1.2推出了Swing早期称java包为核心库,称javax包为扩展库,后来某些javax包也发展成了核心库,如javax.swing,10.1JavaSwing概述,组件(Component)和容器(Container)在Java中,顶层窗口称为框架。在AWT库中,对应于框架的类是Frame,在Swing库中,相应的类是JFrame。JFrame类扩展了Frame类。大部分AWT组件在Swing中都有等价的组件,它们在表示形式上差一个“J”框架(JFrame)是一个容器,我们可以向容器中添加组件图10.1:组件类继承关系通常把AWT控件称为重量级控件,把Swing控件称为轻量级控件,10.1JavaSwing概述,容器(Container)容器是一种比较特殊的组件,它可以包含其他的组件。我们可以把组件放在组件容器中。反之,如果一个组件不是组件容器,则其中不能包含其他的组件组件(Component)组件是有具体图形表示并能在屏幕上显示以和用户进行交互的一类对象。JFrame、JPanel这类轻量级容器也是组件,10.1JavaSwing概述,javax.swing包中的组件包括两种:底层容器组件JFrameJDialogJWindowJApplet轻量级组件JComponent的子类:JButton、JTree、JMenubar、JTextField等,Swing组件继承关系,10.2窗口,底层容器的作用:底层容器用于直接显示到系统平台上,其它组件被添加到底层容器上JFrame(窗口)是一个底层容器不允许将一个窗口添加到另一个容器中JFrame构造方法JFrame()创建一个无标题的窗口JFrame(Stringtitle)创建标题为title的窗口,10.2.1JFrame常用方法,例10.1框架外观的设置设置具有以下特征的框架:它的高度和宽度为整个屏幕的1/3;自定义窗口的标题和图标;窗口的大小不可变。程序代码见FrameSizeSet.java。运行结果如下:,10.2.1JFrame常用方法,JFrame类直接从Frame继承而来。对于框架外观的操作比较重要的方法如下:setIconImage窗口最小化(在Java中称为图标化)时,把一个Image对象用作图标。setTitle设置窗口中标题栏的文字。setResizable设置用户是否可以改变框架大小。dispose方法关闭窗口,并回收该窗口的所有资源。setLocation设置组件的位置。setBounds重新设置组件的大小和位置,11,10.2.1JFrame常用方法,JFrame包含了四个窗格:RootPane、LayeredPane、GlassPane和ContentPane。如果需要将一些图形用户界面元素加入到框架中,我们需要在面板组件(JPanel)中进行绘制,然后将该面板组件加入到框架的内容窗格(ContentPane)中。相应的代码如下:/得到JFrame的内容窗格对象ContainercontentPane=getContentPane();Componentc=newComponent();/Component代表各种控件类/将组件加入到内容窗格中contentPane.add(c);面板JPanel类本身是容器,它可以容纳其他图形用户界面元素,如按钮、菜单等。,10.2.2菜单条、菜单、菜单项,典型的菜单:,10.2.2创建菜单的步骤,创建菜单栏、菜单、子菜单、菜单项将菜单项加入到子菜单或菜单中将子菜单加入到菜单中将菜单加入到菜单栏中,/(a)创建菜单栏,并将菜单栏加入到框架中。JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);/(b)创建“File”菜单、“Edit”菜单和“View”菜单。JMenufileMenu=newJMenu(File);JMenueditMenu=newJMenu(Edit);JMenuviewMenu=newJMenu(View);/(b)创建子菜单。JMenuoptionMenu=newJMenu(Option);,10.2.2创建菜单的步骤,/(c)通过指定菜单项对象新建“Paste”菜单JMenuItempasteItem=newJMenuItem(Paste,P);/(d)将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。editMenu.add(pasteItem);viewMenu.add(optionMenu);menuBar.add(fileMenu);menuBar.add(editMenu);menuBar.add(viewMenu);例ExampleMenu.java,MenuExample.java,10.3文本组件,Java提供的文本组件:用于单行文本输入的文本框(JTextField)和用于多行输入的文本区(JTextArea)1、文本框组件JTextFieldJTextField()创建文本框,文本框的长度为一个机器字符长JTextField(intx)创建文本框,文本框的长度为x个机器字符长TextField(Strings)创建文本框,文本框的初始字符串为spublicvoidsetText(Strings)设置文本框中的文本为参数s指定的文本publicStringgetText()获取文本框中的文本publicvoidsetEditable(booleanb)指定文本框的可编辑性。文本框默认为可编辑的,10.3文本组件,2、文本区组件JTextAreaJTextArea(Strings)文本区初始化字符串为sJTextArea(intx,inty)设置文本区的课件行列数,默认有水平和垂直滚动条voidsetText(Strings)将文本区设置为参数指定的文本voidappend(Strings)将s写入文本区末尾voidcopy()复制到剪贴板voidcut()剪切到剪贴板voidpaste()将剪贴板的内容粘贴到文本区,10.3文本组件,3、密码框JPasswordField特殊的文本域,在密码域中输入时,用户的输入并不会真正显示出来,而是显示回显符,如“*”,以防止被他人看见用户输入的密码,10.4按钮与标签,1、按钮(JButton)使用JButton可以生成包含文字或图形(或两者)的按钮,JButton继承自AbstractButoon,常用的构造方法:(1)JButton():生成一个JButton对象。(2)JButton(Iconicon):生成一个以图形表示的JButton对象。(3)JButton(Stringtext):生成一个使用指定文本的JButton对象。(4)JButton(Stringtext,Iconicon):生成一个包含文字和图形的JButton对象。,10.4按钮与标签,2、标签(JLabel)JLabel创建的对象称做标签。publicJLabel()创建没有名字的标签。publicJLabel(Strings)创建名字是s的标签,s在标签中靠左对齐。publicJLabel(Strings,intaligment)参数aligment决定标签中的文字在标签中的水平对齐方式。publicJLabel(Iconicon)创建具有图标icon的标签,icon在标签中靠左对齐。StringgetText()获取标签的名字。voidsetText(Strings)设置标签的名字是s。IcongetIcon()获取标签的图标。voidsetIcon(Iconicon)设置标签的图标是icon。例Login.java,10.5选择性组件,1JCheckBox类常用方法publicJCheckBox()创建没有名字的选择框。publicJCheckBox(Stringname)创建名字是name的选择框。publicJCheckBox(Iconicon)创建带有默认图标icon,但没有名字的选择框。publicJCheckBox(Stringname,Iconicon)创建一个带有默认图标和名字name的选择框。publicvoidsetIcon(IcondefaultIcon)设置选择框上的默认图标。publicvoidsetSelectedIcon(IconselectedIcon)设置选择框选中状态下的图标。publicbooleanisSelected()如果选择框处于选中状态该方法返回true,否则返回false。publicStringgetText()选择框调用该方法可以获取选择框的名称。publicvoidsetText(Stringname)选择框调用该方法可以设置选择框的名称。,复选框组件示例选择字体风格。程序代码见CheckBoxExample.java。运行结果如下:,10.5选择性组件,10.5选择性组件,2.单选按钮(JRadioButton)在同一组单选按钮中只能选择一个创建方式:1、应用ButtonGroup创建一个对象(例如bg)2、生成JRadioButton的若干对象3、应用bg.add(JRadioButton)将单选按钮归组,10.5选择性组件,3JComponent的子类JComboBox()创建的对象称做下拉列表。下拉列表常用方法publicJComboBox()创建一个没有选项的下拉列表。publicvoidaddItem(ObjectanObject)下拉列表调用该方法增加选项。publicintgetSelectedIndex()返回当前下拉列表中被选中的选项的索引。publicObjectgetSelectedItem()返回当前下拉列表中被选中的选项。.publicvoidremoveItemAt(intanIndex)从下拉列表的选项中删除索引值是anIndex选项。publicvoidremoveAllItems()可以删除全部选项。publicvoidaddItemListener(ItemListener)下向下拉列表注册ItemEvent事件的监视器。,10.6布局管理器,在Java中,提供了布局工具以支持用户界面元素的自动定位。容器中的所有组件都由一个布局管理器进行动态管理,10.6布局管理器,java.awt中的布局:FlowLayout(流布局管理器)BorderLayout(边界布局管理器)GridLayout(网格布局管理器)CardLayout(卡片布局管理器)javax.swing.border包中的布局:BoxLayout设置布局的方法:setLayout(XXLayoutxxl);,10.6.1FlowLayout,在一行上水平排列组件,直到该行没有足够的空间为止,然后另起一行继续排列。当用户缩放容器时,布局管理器将进行自动控制,重新排列。我们可以指定流布局管理器的组件排列方式,如居中(默认)、左对齐、右对齐等。如:setLayout(newFlowLayout(FlowLayout.LEFT);/左对齐setLayout(newFlowLayout(FlowLayout.RIGHT);/右对齐setLayout(newFlowLayout(FlowLayout.CENTER);/居中例FlowLayoutTest.java,10.6.2BorderLayout,边界布局管理器的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH,我们可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER,课本,例10.12,10.6.3GridLayout,网格布局管理器,基本布局策略是把容器分成若干行若干列的网格布局,10.7中间容器,底层容器不能互相嵌套,但是底层容器可以添加中间容器中间容器中,常用的有:JPanel面板JScrollPane滚动窗格JSplitPane拆分窗格JLayeredPane分层窗格,10.7中间容器,JPanelDemo01.java,JScrollPaneDemo01.java,JSplitPaneDemo01.java,10.7事件处理,java界面应用程序的开发步骤:创建界面,设置布局,添加控件实现监视器(或者叫监听器)类实现某个监视接口,监视器类提供的信息包括监听的事件类型以及响应动作为控件注册监视器实现控件对象和监视器对象关联,10.7.1事件处理,事件、事件源和事件监听器如果用户在用户界面执行了一个动作,这将导致一个事件的发生。事件是由事件源产生的,事件的产生者称为事件源。例如,在Button组件上点击鼠标会产生以这个Button为源的一个事件:ActionEvente事件监听器是一个类的实例,这个类实现了一个特殊的接口,称为Lintenerinterface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件,10.7.1委托事件模型,1、MyJFrameextendsJFrame,ActionEvent事件,事件源myJComponent,触发,监听器implementsActionListener实现接口:publicvoidactionPerformed(ActionEvente),调用并传递参数,注册:myJComponent.addActionListener(监听器对象),注册,10.7.2文本框和按钮的事件,改写P218,例10.5,添加实现按钮的事件处理,同样在灰色文本框内输出平方值,TextButtonTest.java,10.7.3菜单事件,菜单项(JMenuItem对象)也可以发生ActionEvent事件增加菜单栏、增加菜单、增加菜单项menuBar.add(menu);menu.add(menuItem);增加对菜单的事件处理函数(监听器监听ActionEvent事件)menuItem.addActionListener(实现ActionListener接口的对象);例JMenuDemo02.java,36,10.7总结1,文本框(输入字符)+回车按钮点击菜单项点击,ActionEvent事件,ActionListener接口actionPerformed(ActionEvent),MyActionListener类actionPerformed(ActionEvent),处理,实现,注册,myButton.addActionListener(newMyActionListener();,37,10.7总结2,MyActionListener的实现方式在MyJFrame类体外实现P217,例10.4在MyJFrame类体内,通过内部类实现P220,例10.6在MyJFrame类体内,通过匿名类实现(P139,匿名类)P220,例10.6,text3.addActionListener(newActionListener()publicvoidactionPerformed(ActionEvente)./本次事件处理的方法体);,回顾:该匿名类会生成一个类,该类实现了ActionListener接口,重写了接口内的所有方法,并且生成一个匿名类的对象作为本次注册的监听器参数(对象),思考:为什么使用new和分号?,10.8AWT事件,AWT事件层次结构图,10.8AWT将事件分为两类,语义(Semantic)事件ActionEvent:对应按钮点击、菜单选择、列表框选择、在文本域中按回车键等AdjustmentEvent:用户调整滚动条ItemEvent:用户从一组选择框或者列表项中进行选择TextEvent:文本域或者文本框中的内容发生改变TreeSelectionEvent:树形组件点击后的事件低级(Low-Level)事件ComponentEvent:组件大小改变、移动、显示或者隐藏KeyEvent:键盘上的一个键被按下或者释放MouseEvent:鼠标按键被按下、释放、鼠标移动或者拖动FocusEvent:组件获得焦点或者失去焦点WindowEvent:窗口被激活、屏蔽、最小化、最大化或关闭ContainerEvent:添加或者删除一个组件,10.8.1窗口事件,JFrame对象是窗口事件(WindowEvent)的事件源,我们要指定一个监听器对象:MyWindowListenerlistener=.;frame.addWindowListener(listener);监听器对象要实现WindowListener接口。WindowListener接口中共有七个方法,它们分别对应七个窗口事件:publicinterfaceWindowListenervoidwindowOpened(WindowEvente);voidwindowClosing(WindowEvente);voidwindowClosed(WindowEvente);voidwindowIconified(WindowEvente);voidwindowDeiconified(WindowEvente);voidwindowActivated(WindowEvente);voidwindowDeactivated(WindowEvente);,41,10.8.1窗口事件,WindowListener接口实现方法一:定义一个类来实现WindowListener接口,在感兴趣的方法中添加我们需要的代码,然后让其他方法为空即可。classQuitWindowimplementsWindowListenerpublicvoidwindowClosing(WindowEvente)System.exit(0);voidwindowOpened(WindowEvente)voidwindowClosed(WindowEvente)voidwindowIconified(WindowEvente)voidwindowDeiconified(WindowEvente)voidwindowActivated(WindowEvente)voidwindowDeactivated(WindowEvente),42,10.8.1窗口事件,WindowListener接口实现方法二:Java为每个具有多个方法的AWT监听器接口提供了一个适配器类。适配器类实现了监听器接口的所有方法,但是却不做任何实际工作。与WindowListener接口对应的WindowAdapter类实现了以上七个空方法,我们只需要通过扩展适配器类来实现我们感兴趣的方法classQuitWindowextendsWindowAdapterPublicvoidwindowClosing(WindowEvente)System.exit(0);例10.22,10.8.2鼠标事件,MouseListener接口处理的鼠标事件:mouseClicked(MouseEvente)鼠标按键在组件上单击(按下并释放)时调用mouseEntered(MouseEvente)鼠标进入到组件上时调用mouseExited(MouseEvente)鼠标离开组件时调用mousePressed(MouseEvente)鼠标按键在组件上按下时调用mouseReleased(MouseEvente)鼠标按钮在组件上释放时调用,例MouseEvent_Example.java,10.8.2鼠标事件,MouseMotionListener接口处理的鼠标事件:mouseDragged(MouseEvent)鼠标拖动触发的事件mouseMoved(MouseEvent)鼠标移动触发的事件P259,Example_10.24,10.8.3焦点事件,如果某个组件能够接收用户按键,那么该组件就拥有焦点。拥有焦点的组件在显示形式上与其他组件有一些差别:文本域内会显示光标;按钮四周会显示一个由虚线组成的矩形框焦点事件:FocusEventeFocusListener接口focusGained(FocusEvente)组件获得焦点时调用focusLo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-广西-广西水利机械运行维护工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西工程测量员一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东计算机操作员二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东水工闸门运行工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东医技工二级(技师)历年参考题库典型考点含答案解析
- 2020-2025年设备监理师之设备工程监理基础及相关知识高分通关题型题库附解析答案
- 2020-2025年基金从业资格证之私募股权投资基金基础知识通关题库(附答案)
- 2025年中级卫生职称-主管技师-输血技术(中级)代码:390历年参考题库典型考点含答案解析
- 2025年银行金融类-金融考试-期货从业历年参考题库含答案解析(5套)
- 2023年设备监理师之设备监理合同通关提分题库及完整答案
- 企业资产收购尽职调查操作手册
- 2025年陕西省综合评标评审专家库考试历年参考题库含答案详解(5套)
- 软件开发项目进展汇报
- 六安市辅警真题2024
- 心电监护技术操作并发症的预防与处理
- 海南省省直辖县级行政单位2024-2025学年七年级下学期7月期末考试语文试卷(含答案)
- 2025年《资料员》考试题库附答案【模拟题】
- 磷石膏砌块项目可行性研究报告
- Unit 8 Let's Communicate!Section A(1a-1d)同步练习(含答案)2025-2026学年人教版(2024)八年级英语上册
- 现场调试合同协议书模板
- DB65∕T 4791-2024 水工隧洞敞开式TBM施工技术规范
评论
0/150
提交评论