《第2章 图形用户界面设计优秀课件.ppt》由会员分享,可在线阅读,更多相关《第2章 图形用户界面设计优秀课件.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章图形用户界面设计第1页,本讲稿共79页第2章主要内容2.1.Applet及awt类包2.2文本组件及按钮类2.3.面板与布局管理2.4.事件处理2.5.常用图形用户界面组件2.6.Swing组件第2页,本讲稿共79页2.1.1AppletApplet是一个功能非常强大的能够嵌入到HTML页面中,并在浏览器中自动执行的Java程序。当使用浏览器对一个包含Applet的Web页面进行浏览时,浏览器将从Web服务器下载Applet程序到本地执行。2.1awt类包及Applet第3页,本讲稿共79页什么是AppletApplet就是使用Java语言编写的一段代码,它可以在浏览器环境中运行。它与A
2、pplication的区别主要在于其执行方式的不同。application是从其中的main()方法开始运行的Applet是在浏览器中运行的,必须创建一个HTML文件,通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行。第4页,本讲稿共79页执行Applet用浏览器打开嵌入Applet的HTML文件或者用JDK自带的命令行工具appletviewer打开HTML文件appletviewerhello.html第5页,本讲稿共79页Applet的执行过程浏览器载入要访问的HTML文件的URL地址。浏览器装入HTML文件浏览器载入Applet的类字节代码启动Java虚拟机执行App
3、let。第6页,本讲稿共79页Java.applet.Applet类java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.Panel|+-java.applet.Applet第7页,本讲稿共79页Applet中的主要方法init()在Applet创建时被虚拟机自动调用,用来完成数据的初始化。start()init()方法被调用之后,接着调用start()方法;每次Applet被激活时,都会调用start()方法。第8页,本讲稿共79页stop()方法其被调用时机与start()方法相反,每次Applet由活动
4、状态变为不活动状态时,都会自动调用stop()方法。destroy()方法Applet销毁时由虚拟机自动调用的方法,用来完成所有占用资源的释放。第9页,本讲稿共79页Applet的定义publicclassAppletextendsPanelpublicApplet();publicvoidstart();publicvoidstop();publicURLgetDocumentBase();第10页,本讲稿共79页JavaApplet程序的一般形式importjava.applet.*;public类名extendsAppletpublicvoidinit();publicvoidstart
5、();publicvoidstop();publicvoiddestroy();第11页,本讲稿共79页JavaApplet程序的运行第12页,本讲稿共79页2.1.2awt类包(1)基本的窗口类:Frame、Dialog(2)基本的GUI组件类:Button、Label、TextField、TextArea、Checkbox(3)基本的事件接口:ActionListener、WindowListener、MouseListener、KeyListener(4)界面布局控制类:FlowLayout、BorderLayout、GridLayout、CardLayout(5)基本的绘图支持类:Gr
6、aphics、Canvas第13页,本讲稿共79页2.2文本组件及按钮类第14页,本讲稿共79页2.2.1文本组件类1、TextComponent类方法名功能setText(String t)设置文本内容getText()获取文本内容isEdit()检测文本的可编辑性setEdit(Boolean b)检测文本的可编辑性getSelectedText()获取选取文本内容select(int selStart,intselEnd)选取文本内容第15页,本讲稿共79页2、TextField类文本框TextField是对单行文本进行编辑的组件。它用来接受用户的输入码或显示可编辑的文本。创建文本框Te
7、xtFieldtext=newTextField(Stringstr);第16页,本讲稿共79页【例2-1】1./*TextField类的简单示例*/2.importjava.applet.*;3.importjava.awt.*;2.publicclassExample2_1extendsApplet5.6.TextFieldtext1,text2,text3;7.publicvoidinit()8.9.text1=newTextField(输入密码:,10);10.text1.setEditable(false);11.text2=newTextField(10);12.text2.set
8、EchoChar(*);13.text3=newTextField(我是一个文本框,20);12.add(text1);/将文本框添加到Applet中15.add(text2);16.add(text3);17.text3.setText(重新设置了文本);18.19.第17页,本讲稿共79页3、TextAear类文本区TextArea是对多行文本进行编辑的组件,它拥有水平或垂直的滚动条.TextAreatxt1=newTextArea(行,列);第18页,本讲稿共79页4、标签Label类(1)创建标签创建标签对象时应同时说明这个标签中的字符串:Labellb=newLabel(“请输入姓名
9、”);(2)常用方法setText(Stringstr)设置标签文本内容;getText()获取标签文本内容。第19页,本讲稿共79页2.2.2按钮(Button)类定义:1.publicclassButtonextendsComponent2.3.publicButton()2.publicButton(Stringlabel)5.publicStringgetLabel()6.publicvoidsetLabel(Stringlabel)7.publicvoidaddActionListener(ActionListenerl)8.publicvoidremoveActionListene
10、r(ActionListenerl)9.第20页,本讲稿共79页表2.2按钮Button类常用方法方法名功能Button()构造方法Button(String label)构造方法getLabel()获取标签内容setLabel(String label)设置标签内容addActionListener(ActionListener l)设置监听器第21页,本讲稿共79页【例2-3】1./*构造按钮*/2.importjava.applet.*;3.importjava.awt.*;2.publicclassExample5_3extendsApplet5.6.Buttonbtn;7.publi
11、cvoidinit()8.btn=newButton(确定);9.add(btn);/把按钮加到Applet中10.11.第22页,本讲稿共79页ActionListener接口awt对这个接口的定义是:publicinterfaceActionListenerextendsEventListenerpublicabstractvoidactionPerformed(ActionEvente)第23页,本讲稿共79页注意:设计处理事件的类时,就要实现这个接口。其一般形式如下:classClassNameimplementsActionListenerbtn.addActionListener(
12、this);publicabstractvoidactionPerformed(ActionEvente)第24页,本讲稿共79页事件监听器通过实现ActionListener接口,使得监听器能知道事件的发生。在Java中,要求产生事件的组件向它的监听器注册,这样,事件源与监听器就建立了一个对应关系。建立对应关系的语句如下:对象名.addActionListener(ClassName);其中,对象是事件源,ClassName是监听器。例如:btn.addActionListener(this);这条语句的意思是:按钮对象(事件源)btn向它的监听器(当前类)注册,也就是产生事件的事件源对象向
13、监听器注册。第25页,本讲稿共79页【例2-2】设计一个密码验证程序。1./*按钮动作事件*/2.importjava.applet.*;3.importjava.awt.*;2.importjava.awt.event.*;5.publicclassExample2_2extendsAppletimplementsActionListener6.7.Labellb=newLabel(“请输入密码:”);8.TextFieldtxt1=newTextField(25);9.Buttonbtn=newButton(确定);10.TextFieldtxt2=newTextField(25);第26
14、页,本讲稿共79页11.publicvoidinit()12.13.add(lb);12.add(txt1);15.txt1.setEchoChar(*);/设置掩码16.add(btn);17.add(txt2);18.btn.addActionListener(this);19.20.publicvoidactionPerformed(ActionEvente)21.22.if(txt1.getText().equals(abc)/比较字符串23.txt2.setText(密码正确!);22.else25.txt2.setText(密码错误!);26.27.第27页,本讲稿共79页实践作业
15、:设计一个序列号程序:当输满一节字符后自动把焦点跳到下一个文本框。XXXXXXXXXXXXXXX请输入序列号请输入序列号:XXXXX第28页,本讲稿共79页序列号算法假设根据用户名计算序列号。例如将用户输入的用户名的所有字母ASCII码乘199再加起来,如果用户名短于20位,补满20位,超过20位,只使用前20位。检验序列号的方法就是将根据用户输入的用户名计算一遍,然后对比计算出来的号码和用户输入的是否一致。第29页,本讲稿共79页2.3面板与布局管理第30页,本讲稿共79页2.3.1面板(Panel)类创建面板的一般步骤为:(1)创建面板对象:PanelmyPanel=newPanel();
16、(2)将面板添加到Applet容器中:add(myPanel);(3)把组件放置到面板上:myPanel.add(组件);第31页,本讲稿共79页【例2-5】面板Panel简单示例1./*面板Panel简单示例*/2.importjava.awt.*;3.publicclassExample2_5extendsjava.applet.Applet2.5.Panelpanel1,panel2;6.Buttonbutton1,button2,button3,button2;7.publicvoidinit()8.9.panel1=newPanel();10.panel2=newPanel();11
17、.add(panel1);add(panel2);/添加面板12.button1=newButton(Button1);13.button2=newButton(Button2);12.button3=newButton(Button3);15.button2=newButton(Button2);16.panel1.add(button1);panel1.add(button2);17.panel2.add(button3);panel2.add(button2);18.panel1.setBackground(Color.red);19.panel2.setBackground(Color
18、.blue);20.21.第32页,本讲稿共79页2.3.2布局策略Java在java.awt包中定义了5种布局,它们分别是:FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout。设置布局的格式为:容器对象.setLayout(布局策略);第33页,本讲稿共79页1.浮动布局FlowLayout浮动布局是按照组件的顺序,用add方法将组件从左至右在一行排列,一行放不下时就自动换行。这是系统的默认的布局方式。其设置的方法为:setLayout(newFlowLayout();第34页,本讲稿共79页2.边界布局BorderLayo
19、utBorderLayout类把容器划分成5个区域,分别标记为“North”、“South”、“West”、“East”和“Center”。其设置的方法为:setLayout(newBorderLayout();中中北北西西南南东东第35页,本讲稿共79页【例2-6边界布局示例】1./*边界布局示例*/2.importjava.awt.*;3.publicclassExample2_6extendsjava.applet.Applet2.5.publicvoidinit()6.setLayout(newBorderLayout();7./将其他构件加入8.add(East,newButton(
20、东);9.add(South,newButton(南);10.add(West,newButton(西);11.add(North,newButton(北);12.add(Center,newButton(中);13.12.第36页,本讲稿共79页3.网格布局GridLayoutGridLayout类以矩形网格形式对容器中的组件进行布局。容器被分成大小相等的单元格,单元格的大小由最大的构件所决定,用add方法将组件一行一行地从左至右放置到布局的每个单元格中。其设置的方法为:setLayout(newGridLayout(introw,intcols);row是网格的行数,cols是网格的列数。
21、第37页,本讲稿共79页4.卡片布局CardLayout这种布局包含几个卡片,在某一时刻只有一个卡片是可见的,而且第一个卡片显示的内容可用自己的布局来管理。卡片布局设置的方法为卡片布局设置的方法为:setLayout(new CardLayout();第38页,本讲稿共79页2.2事件处理1、AWT事件处理模型2、事件处理程序的编写第39页,本讲稿共79页2.2.1事件处理机制1、事件处理模型在事件处理的过程中,主要涉及三类对象:Event-事件,用户对界面操作在Java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。EventSource-事件源,事件发生的场所,通
22、常就是各个组件,例如按钮Button。Eventhandler-事件处理者,接收事件对象并对其进行处理的对象。第40页,本讲稿共79页授权处理机制第41页,本讲稿共79页2、事件类(例SimpleEvent.java)在Java中,每个事件都是某种事件类的对象,可以归为两大类:低级事件和高级事件。低级事件:KeyEvent(键盘事件:键按下、释放);MouseEvent(鼠标事件:鼠标单击,移动)。高级事件:ActionEvent(动作事件:按钮按下,TextField中按Enter键等)方法:ObjectgetSource():发生事件的对象。第42页,本讲稿共79页3、事件监听器类每类事件
23、都有对应的事件监听接口,如:MouseEvent-MouseListener,KeyEvent-KeyListener等。可以定义一个实现了某个事件监听接口的类,并重写需要的方法,专门负责某种事件处理。例如,定义一个事件监听类实现对键盘按下事件的监听:第43页,本讲稿共79页publicclassKeyListenerimplementsKeyListenerpublicvoidkeyPressed(KeyEventev)/事件处理代码;publicvoidkeyReleased(KeyEventev)publicvoidkeyTyped(KeyEventev)例:KeyTest.java第4
24、4页,本讲稿共79页1、事件处理程序的编写步骤:首先:定义一个实现了相应事件监听接口的类,如:classKeyHandlerimplementsKeyListener其次:为组件注册监听器对象,如:btn.addKeyListener(newKeyHandler();事件处理程序的编写事件处理程序的编写第45页,本讲稿共79页2、使用类本身实现监听接口例如使用类本身监听KeyEvent事件:publicclassKeyTestimplementsKeyListenerpublicKeyTest()Buttonbtn=newButton(“Rec”)/initbtn.addKeyListener
25、(this);/addlistener/事件处理代码例:KeyTest.java第46页,本讲稿共79页3、定义专门的外部类实现监听接口publicclassKeyTestpublicKeyTest()Buttonbtn=newButton(“Rec”);/initbtn.addKeyListener(newKeyHandler();/addlistenerclassKeyHandlerimplementsKeyListener/事件处理代码第47页,本讲稿共79页4、用内部类实现监听接口publicclassKeyTestpublicKeyTest()Buttonbtn=newButton(
26、“Rec”);/initbtn.addKeyListener(newKeyHandler();/addlistenerclassKeyHandlerimplementsKeyListener/事件处理代码第48页,本讲稿共79页5、采用事件适配器Java为一些Listener接口提供了适配器类。如KeyListenerKeyAdapter等。为用户提供了一种简单的实现监听器的手段,可以缩短程序代码。可以通过继承事件所对应的Adapter类,重写需要的方法,而无关的方法不用实现。例如:KeyTest.java第49页,本讲稿共79页6、一个组件注册多个监听者由于同一个事件源上可能发生多种事件,因
27、此Java采取了授权处理机制。事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。例如:MultiListener.java第50页,本讲稿共79页2.2.5鼠标键盘事件1、鼠标事件在图形界面中,鼠标的使用是最频繁的。在Java中,当用户使用鼠标进行操作时,就会产生鼠标事件MouseEvent。对MouseEvent事件的响应是实现MouseListener接口或MouseMotionListener接口,或者是继承MouseApdapter类,来实现鼠标适配器Mous
28、eAdapter提供的方法。第51页,本讲稿共79页与鼠标的事件有关可以分为两类:(1)主要针对鼠标的坐标位置进行检测,使用MouseListener接口;(2)主要针对鼠标的拖曳状态进行检测,使用MouseMotionListener接口。第52页,本讲稿共79页2键盘事件在Java中,当用户使用键盘进行操作时,就会产生KeyEvent事件。监听器要完成对事件的响应,就要实现KeyListener接口,或者是继承KeyAdapter类,实现对类中方法的定义。第53页,本讲稿共79页KeyListener接口在KeyListener接口中有如下3个事件:(1)KEY_PRESSED:键盘按键被
29、按下所产生的事件。(2)KEY_RELEASED:键盘按键被释放所产生的事件。(3)KEY_TYPED:键盘按键被点击所产生的事件。在实现接口时,对应的上面3个事件的处理方法是:keyPressed(Evente);keyReleased(KeyEvente);keyTyped(keyEvente);第54页,本讲稿共79页2.5常用图形用户界面组件2.5.1窗体(Frame)类Frame是带有标题、边框的顶层窗体。Frame包含有标题、菜单、类似于文本区的区域和按钮,其外观依赖于所使用的操作系统。第55页,本讲稿共79页(1)窗体Frame类的定义awt对Frame类的定义为:1.publi
30、cclassFrameextendsWindowimplementsMenuContainer2.3.publicFrame()2.publicFrame(Stringtitle)5.publicStringgetTitle()6.publicvoidsetTitle(Stringtitle)7.publicMenuBargetMenuBar()8.publicvoidsetMenuBar(MenuBarmb)9.publicvoiddispose()10.其中:第3、2、行是窗体的构造方法,第5行是获取标题内容,第6行是设置标题内容,第7行的方法是获取在该窗体的菜单,第8行是设置菜单,第9行
31、是关闭窗体的方法。Frame在缺省的情况是不可见的,要调用setVisible(true)方法使其可见。Frame默认的布局方式为BorderLayout布局。第56页,本讲稿共79页(2)创建窗体创建窗体有二种方法,一种方法是创建Frame类的子类,并重写其构造方法。另一种方法是创建Frame类的一个对象:Framewin=newFrame(简单窗体);第57页,本讲稿共79页(3)Frame类的方法方法名功能Frame();创建无标题的窗体Frame(String s);创建标题为s的窗体setMenuBar(MenuBar mb);设置菜单dispose();关闭窗体,释放占用资源set
32、Visible(bolean b);设置窗体的可见性setSize(int width,int height);设置窗体的大小 setTitle(String title);设置标题内容getTitle();获取标题内容第58页,本讲稿共79页一、选择组件复选框(Checkbox)Checkbox(Stringlabel):使用指定标签创建一个复选框。Checkbox(Stringlabel,booleanstate):使用指定标签创建一个复选框,并将它设置为指定状态。Checkbox(Stringlabel,CheckboxGroupgroup,booleanstate):使用指定标签构造一
33、个Checkbox,并将它设置为指定状态,使它处于指定复选框组中。2.5.2选择组件第59页,本讲稿共79页单选按钮组(CheckboxGroup)提供了将多个复选框作为互斥的一个集合的方法,在任何时刻,这个集合中只有一个复选框的值为true。CheckboxGroup():创建CheckboxGroup的一个新实例。例如,以下的三个Checkbox都被指定加入cbg单选按钮组中。第60页,本讲稿共79页CheckboxGroupcbg=newCheckboxGroup();Checkboxone=newCheckbox(“one”,true,cbg);Checkboxtwo=newCheck
34、box(“two”,false,cbg);Checkboxthree=newCheckbox(“three”,false,cbg);第61页,本讲稿共79页下拉列表(Choice)下拉列表每次只能选取其中的一项例如:Choicec=newChoice();c.add(“First”);c.add(“Second”);c.add(“Third”);第62页,本讲稿共79页滚动列表(List)有多个文本选项,可以同时选择多项。List(introws,booleanmultipleMode)创建一个初始化为显示指定行数的新滚动列表,同时指出是否可以同时选择多项。例如:Listlst=newList
35、(3,false);lst.add(“One”);lst.add(“Two”);lst.add(“Three”);第63页,本讲稿共79页选择事件(ItemEvent)所有选择组件都有一个共同的事件类,引发选择事件的动作为:改变复选框对象的状态。改变下拉列表对象的状态。改变滚动列表的状态。使用ItemListener监听,该接口中只有一个方法:itemStateChanged(ItemEvente)第64页,本讲稿共79页ItemEvent的主要方法getItem():返回受事件影响的项。getStateChange():返回状态更改的类型(已选定或已取消选定)。ItemEvent.SELEC
36、TED:代表选项被选中Item.DESELECTED:代表选项未选中第65页,本讲稿共79页二、菜单组件不能将菜单组件直接添加到一般的容器中不能使用布局管理器对它们进行布局AWT提供的菜单机制是:一个容器包含一个菜单条,一个菜单条中包含多个菜单,一个菜单中包含多个菜单或菜单项和菜单相关的组件有四个:MenuBar,Menu,MenuItem,CheckboxMenuItem.2.5.3菜单和对话框第66页,本讲稿共79页菜单条(MenuBar)一个菜单条组件是一个水平容器,并作为所有菜单树的根。一个窗体中只可以显示一个菜单条。菜单条不能注册任何监听者。例如:Framefr=newFrame()
37、;MenuBarmb=newMenuBar();f.setMenuBar(mb)第67页,本讲稿共79页菜单(Menu)菜单组件提供了一个基本的下拉式菜单,它可以加入到一个菜单条或者另一个菜单中。例如:MenuBarmb=newMenuBar();Menumu1=newMenu(“File”);Menumu2=newMenu(“Edit”);mb.add(mu1);mb.add(mu2);f.setMenuBar(mb);第68页,本讲稿共79页菜单项(MenuItem)菜单项组件通常被加入到菜单中,以构成一个完整的菜单。通常,将一个ActionListener注册到一个菜单项对象中,接收和处
38、理选中菜单项的事件。例如:Menumu=newMenu(“File”);MenuItemmi1=newMenuItem(“New”);MenuItemmi2=newMenuItem(“Load”);mu.add(mi1);mu.add(mi2);第69页,本讲稿共79页复选菜单项(CheckboxMenuItem)是一个可复选的菜单项,在菜单上有选项“开/关”。应当使用ItemListener接口来监听该菜单项,当复选菜单项的状态发生改变时,就会调用itemStateChanged()方法。第70页,本讲稿共79页2.6 为什么要使用为什么要使用Swing轻量级组件。轻量级组件。比比AWT更丰
39、富、性能增强。更丰富、性能增强。在在AWT组件的类名前加组件的类名前加“J”。第71页,本讲稿共79页二二 JFrame的使用的使用JFrame与Frame组件不同之处:窗体内不能直接安放组件,也不能设置布局管理器,而要使用Awt的虚拟容器Container。关闭窗体:setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);老版本老版本第72页,本讲稿共79页【例【例2-6】应用应用JFrame类建立类建立一个窗体一个窗体第73页,本讲稿共79页【例【例2-7】建立一个可拆分的窗体。建立一个可拆分的窗体。关键点:关键点:拆分窗体类为拆分窗体类为JSplit
40、Pane第74页,本讲稿共79页拆分窗体类拆分窗体类JSplitPaneJSplitPane的构造方法:JSplitPane(拆分方式,组件1,组件2)其中拆分方式为:HORIZONTAL_SPLIT(水平拆分)或VERTICAL_SPLIT(垂直拆分)第75页,本讲稿共79页在组件上使用图标在组件上使用图标创建图标类创建图标类Icon的构造方法:的构造方法:ImageIcon(“图像文件图像文件”);也可以直接使用也可以直接使用ImageIcon类类第76页,本讲稿共79页表格(表格(JTable)使用数组处理数据使用数组处理数据第77页,本讲稿共79页树(树(JTree)树结构树结构第78页,本讲稿共79页本章结束!第79页,本讲稿共79页