JavaGUI应用程序设计课件_第1页
JavaGUI应用程序设计课件_第2页
JavaGUI应用程序设计课件_第3页
JavaGUI应用程序设计课件_第4页
JavaGUI应用程序设计课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

JavaGUI应用程序设计

7.1抽象窗口工具集(AWT)AWT--AbstractWindowToolkitGUI--GraphicalUserInterfaceAWT中定义了多种类和接口,用于在JavaApplication/Applet中进行GUI设计java程序要显示的GUI组件必须是抽象类Component或MenuComponent的子类AWT组件相关类的层次关系

图7-1JavaAWT组件类的层次关系

设计和实现用户图形界面

主要包括以下三个方面:

l设计组件(Component):包括设计Java.awt包中提供的组件和用户自定义的组件;l

指定布局(Layout);根据设计需要排列容器内各组件的位置;l

设计响应事件(Event)。java.awt包java.awt包

提供了基本的java程序GUI设计工具。Component/MenuComponentContainerLayoutManager7.1.1容器(Container)容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。容器类对象可使用方法add()添加组件两种主要的容器类型Window:可自由停泊的顶级窗口Panel:可作为容器容纳其它组件,但不能独立存在,必须被添加到其它容器中(如Window或Applet)Java中GUI容器类层次

Frame类Frame类是抽象类Window的子类Frame对象显示效果是一个“窗口”,带有标题和尺寸重置角标默认初始化为不可见的,可使用setVisible(true)方法使之变为可见默认的布局管理器是BorderLayout可使用setLayout()方法改变其默认布局管理器Frame类继承层次java.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Window| +----java.awt.FrameFrame类

Frame应用举例

importjava.awt.*;publicclassTestFrame{ publicstaticvoidmain(Stringargs[]){ Framef=newFrame("MyFrameTest"); f.setSize(170,100); f.setBackground(Color.blue); f.setVisible(true); }}Panel类提供容纳组件的空间可以采用和所在容器不同的布局管理器

Panel类的继承层次java.lang.Object|+----java.awt.Component|+----java.awt.Container| +----java.awt.Panel

Panel

应用举例importjava.awt.*;publicclassTestFrameWithPanel{publicstaticvoidmain(Stringargs[]){ Framef=newFrame("My

FrameWithPanel

Test");Panelpan=newPanel();f.setSize(180,100);f.setBackground(Color.blue);f.setLayout(null);//取消布局管理器

pan.setSize(100,60);pan.setBackground(Color.green);f.add(pan);f.setVisible(true);}}7.1.2布局管理器为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。容器布局(ContainerLayouts)

FlowLayoutBorderLayoutGridLayoutCardLayoutGridBagLayout默认布局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayoutFlowLayout布局管理器FlowLayout是Panel类的默认布局管理器FlowLayout布局对组件逐行定位,行内从左到右,一行排满后换行默认对齐方式为居中对齐不改变组件的大小,按组件原有尺寸显示组件可在构造方法中设置不同的组件间距、行距及对齐方式FlowLayout举例importjava.awt.*;publicclassTestFlowLayout{publicstaticvoidmain(Stringargs[]){ Framef=newFrame("FlowLayout");Buttonbutton1=newButton("Ok");Buttonbutton2=newButton("Open");Buttonbutton3=newButton("Close");f.setLayout(newFlowLayout());f.add(button1);f.add(button2);f.add(button3);f.setSize(100,100);f.setVisible(true);}}FlowLayout的构造方法newFlowLayout(FlowLayout.RIGHT,20,40);

右对齐,组件之间水平间距20个像素,竖直间距40个像素;newFlowLayout(FlowLayout.LEFT);

左对齐,水平和竖直间距为缺省值:5;newFlowLayout();

使用缺省的居中对齐方式,水平和竖直间距为缺省值:5;BorderLayout布局管理器BorderLayout是Frame类的默认布局管理器BorderLayout将整个容器的布局划分成东、西、南、北、中五个区域,组件只能被添加到指定的区域如不指定组件的加入部位,则默认加入到Center区域每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃BorderLayout布局管理器BorderLayout型布局容器尺寸缩放原则北、南两个区域只能在水平方向缩放(宽度可调整)东、西两个区域只能在垂直方向缩放(高度可调整)中部可在两个方向上缩放北南西东中部BorderLayout举例importjava.awt.*;publicclassTestBorderLayout{ publicstaticvoidmain(Stringargs[]){ Framef; f=newFrame("BorderLayout");

Buttonbn=newButton("BN");

Buttonbs=newButton("BS");

Buttonbw=newButton("BW"); Buttonbe=newButton("BE");

Buttonbc=newButton("BC"); f.add(bn,"North"); f.add(bs,"South"); f.add(bw,"West"); f.add(be,"East"); f.add(bc,"Center"); f.setSize(200,200); f.setVisible(true); }}GridLayout

布局管理器GridLayout型布局管理器将布局划分成规则的矩形网格,每个单元格区域大小相等.组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下.在GridLayout构造方法中指定分割的行数和列数.

newGridLayout(3,4);GridLayout举例importjava.awt.*;publicclassTestGridLayout{publicstaticvoidmain(Stringargs[]){Framef=newFrame("GridLayoutExample");Buttonb1=newButton("b1");Buttonb2=newButton("b2");Buttonb3=newButton("b3");Buttonb4=newButton("b4");Buttonb5=newButton("b5");Buttonb6=newButton("b6");f.setLayout(newGridLayout(3,2));f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);f.add(b6);f.pack();f.setVisible(true);}}CardLayout

布局管理器CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,就好象一叠卡片摞在一起。注意:在一张卡片中只能显示一个组件,因此可以使用容器嵌套方法显示多个组件。

布局管理器总结(1)FrameFrame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。PanelPanel无法单独显示,必须添加到某个容器中。Panel的缺省布局管理器为FlowLayout。当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件。布局管理器总结(2)在程序中安排组件的位置和大小时,应注意:容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:

setLayout(null);7.1.3标签和文本编辑区

Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。组件是图形用户界面标准化的结果,标签和文本编辑区就是常用的控制组件。

7.1.3标签和文本编辑区标签(Label)是用于显示一行文本,这行文本的内容只能在程序中设置或修改,用户使用过程中无法修改,Label类是Java.awt包中专门用来建立标签的;

Java中用于处理文本的基本组件有两种:单行文本框TextField和多行文本区域TextArea。

组件定位Java组件在容器中的位置和尺寸由布局管理器决定如要人工控制组件在容器中的大小位置,可取消布局管理器,然后使用Component类的下述成员方法:setLocation()setSize()setBounds()文本编辑区应用举例

importjava.applet.*;importjava.awt.*;publicclassTestTextFieldextendsApplet{TextFieldtext1,text2,text3,text4,text5;publicvoidinit(){text1=newTextField("请输入用户名:",10);text1.setEditable(false);text2=newTextField(20);text3=newTextField("请输入密码:",10);text3.setEditable(false);text4=newTextField(20);text4.setEchoChar('*');text5=newTextField("登录界面",20);

add(text1);add(text2);add(text3);add(text4);add(text5);}}AWT

绘图可以在任何Java组件上绘图(通常Canvas和Panel组件更适合用于绘图)每个Java组件都有一个publicvoidpaint(Graphicsg)方法专门用于绘图目的,每次重画该组件时都自动调用paint方法。每个Java组件都有一个Graphics类型的属性,该属性(对象)真正完成在相应组件上的绘图功能。Graphics类中实现了许多绘图方法: --绘制边框(非填充图形) --填充特定区域 --绘制其它形状图形AWT

绘图举例importjava.awt.*;publicclassAWTDrawing{privateFramef=newFrame("HelloOutThere!");privatePanelp=newPanel(); publicvoidlaunchFrame(){ f.add(p); f.setSize(170,170); f.setBackground(Color.blue); f.setVisible(true); p.setForeground(Color.red);

Graphicsg=p.getGraphics(); g.drawArc(30,40,50,60,70,80); g.fillArc(30,40,50,60,70,80); } publicstaticvoidmain(Stringargs[]){ AWTDrawingguiWindow=newAWTDrawing(); guiWindow.launchFrame();}}AWT

绘图举例importjava.awt.*;classSubPanelextendsPanel{ publicvoidpaint(Graphicsg){ g.drawString("thisisadrawingtest!",20,20); g.drawLine(30,60,100,120); g.draw3DRect(60,50,70,30,false); } } publicclassAWTDrawing2{privateFramef=newFrame("HelloOutThere!");privateSubPanelp=newSubPanel();publicvoidlaunchFrame(){ f.add(p); f.setSize(170,170); f.setBackground(newColor(89,145,145)); f.setVisible(true);}publicstaticvoidmain(Stringargs[]){ AWTDrawing2guiWindow=newAWTDrawing2(); guiWindow.launchFrame();}}7.1.4事件处理事件(Event)–一个对象,它描述了发生什么事情事件源(Eventsource)–产生事件的组件监听器接口(事件处理方法)–能够接收、解析和处理事件类对象、实现和用户交互的方法用户鼠标点击actionPerformed(ActionEvente){……}①②③ActionEvent事件处理模型(DelegationModel)一个事件可以被发送到多个不同的处理方法.如果关注某个组件产生的事件,则可以在该组件上注册适当的事件处理方法,实际上注册的事件处理者方法所属类型的一个对象----事件监听器事件处理模型JavaGUI设计中,通过注册监听器的方式对所关注的事件源进行监控。注册监听器时应指明该监听器监控(感兴趣)的事件种类。当事件源发生了某种类型的事件时,只触发事先已就该种事件类型注册过的监听器。Java事件分类JavaGUI事件及相应监听器接口(1)事件类型相应监听器接口监听器接口中的方法ActionActionListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)MouseMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)MouseMotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)KeyKeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)JavaGUI事件及相应监听器接口(2)事件类型相应监听器接口监听器接口中的方法AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)ContainerContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)多重监听器一般情况下,事件源可以产生多种不同类型的事件,因而可以注册(触发)多种不同类型的监听器。一个事件源组件上可以注册多个监听器,针对同一个事件源的同一种事件也可以注册多个监听器,一个监听器可以被注册到多个不同的事件源上。Java事件处理举例多重监听器应用案例见例7-10,p1807.2ATW组件库

7.2.1Component类:抽象类Component是所有JavaGUI组件的共同父类。Component类规定了所有GUI组件的基本特性,该类中定义的方法实现了作为一个GUI部件所应具备的基本功能。

Component类(及其子类)中常用的属性和对应的操作属性的方法见下页表格

Component及其子类常用属性和方法属性名称

设置属性的方法

获取属性的方法背景颜色voidsetBackground(Color)ColorgetBackground()边界voidsetBounds(Rectangle)voidsetBounds(int,int,int,int)RectanglegetBounds()光标voidsetCursor(Cursor)CursorgetCursor()拖放目标voidsetDropTarget(DropTarget)DropTargetgetDropTarget()使能voidsetEnabled(boolean)booleanisEnabled()字体voidsetFont(Font)FontgetFont()前景色voidsetForeground(Color)ColorgetForeground()地区voidsetLocale(Locale)LocalegetLocale()位置voidsetLocation(Point)voidsetLocation(int,int)PontgetLocation()PointgetLocationOnScreen()部件名称voidsetName(String)StringgetName()尺寸voidsetSize(Dimension)DimensiongetSize()可见性voidsetVisible(boolean)booleangetVisible()常用AWT组件组件类型说明Button可接收点击操作的矩形GUI组件Canvas用于绘图的面板Checkbox复选框组件CheckboxMenuItem复选框菜单项组件Choice下拉式列表框,内容不可改变Component组件类Container容器类Dialog对话框组件,顶级窗口、带标题栏Frame基本的JavaGUI窗口组件Label标签类List包含内容可变的条目的列表框组件Menu菜单组件MenuItem菜单项(二级菜单)组件Panel基本容器类,不能单独停泊Scrollbar滚动条组件ScrollPane带水平及垂直滚动条的容器组件TextArea多行文本域TextField单行文本框Window抽象的GUI窗口类,无布局管理器7.2.2复选框和单选框复选框(Checkbox)用于设置多重选择,单选框用于设置单项选择。

Checkboxchk=newCheckbox(“one”,null,true);//标签,组名,状态,复选框将复选框用CheckboxGroup进行分组即变为单选框。CheckboxGroupchkg=newCheckboxGroup();Checkboxchk=newCheckbox(“one”,chkg,true);应用案例见例7-11,例7-12,例7-137.2.3下拉列表框和列表框Choice(下拉式菜单)每次只能选择一项Choicech=newChoice();

ch.add(“Green”);

ch.add(“Red”);下拉列表框(Choice)事件源产生的事件是ItemEvent类型.处理该事件的接口是ItemListener,接口中的方法是itemStateChanged(ItemEvente)。

List(列表)支持单选和多选Listl=newList(4,false);//行数,是否多选列表框List类的事件比下拉列表框Choice要复杂,双击列表框List上的选项引发选项事件ItemEvent和动作事件ActionEvent,下拉列表框Choice仅引发ItemEvent类事件。应用案例见例7-11,例7-12,例7-137.2.4按钮(Button)Buttonb=newButton(“Quit”)add(b);注:1:当按钮对象被点击后,将会发生ActionEvent事件2:getActionCommand()获得标识名3:setActionCommand()设置标识名应用案例见例7-11,例7-12,例7-137.2.5窗口和菜单

窗口就是由java.awt包中的Frame类或子类所创建的对象;窗口默认布局是BorderLayout;Frame类是Window类的子类,其常用的方法简单,在使用时只需要如何创建、显示和关闭就可以了。

如何创建菜单首先创建一个MenuBar对象,并将其置于一个可容纳菜单的容器(如Frame对象)中。创建一个或多个Menu对象,并将它们添加到先前创建的MenuBar对象中。创建一个或多个MenuItem对象,再将其加入到各Menu对象中创建MenuBar例7-17:创建

MenuBar

importjava.awt.*;publicclassTestMenuBar{publicstaticvoidmain(String[]args){ Framef=newFrame("MenuBar"); MenuBarmb=newMenuBar(); f.setMenuBar(mb); f.setSize(200,150); f.setVisible(true);}}创建Menuimportjava.awt.*;publicclassTestMenu{publicstaticvoidmain(String[]args){ Framef=newFrame("Menu"); MenuBarmb=newMenuBar(); f.setMenuBar(mb); Menum1=newMenu("File"); Menum2=newMenu("Edit"); Menum3=newMenu("Help");

mb.add(m1); mb.add(m2); mb.setHelpMenu(m3); f.setSize(150,120); f.setVisible(true);}}7.2.6对话框对话框是AWT中常用的容器,它使用Dialog类,依赖与其它的窗口运行。它提供了一个有用的FileDialog子类,能产生一个文件对话框帮助用户打开和保存文件.对话框必须依赖与其它窗口而存在,当它所依赖的窗口消失时,对话框也将随之关闭。当它依赖的窗口最小化时,对话框也从屏幕上消失,当窗口恢复到正常状态时,对话框也重新显示出来。对话框可以分为无模式对话框和有模式对话框两种。应用案例见例7-217.3Swing图形用户界面

Swing组件从功能上可以划分为以下几类:顶层容器:JFrame、JApplet、JWindow和JDialog。普通容器:JPanel,JScrollPane,JSplitPane和JTabbedPan,也叫中间层容器,在各种情况下使用。特殊容器:JInternalFrame,JLayerPane,JRootPane和JToolBar,能够起到特殊作用的容器。基本组件:如JButton,JComboxBox,JList,JMenu,JSlider和JTextField,是应用较多的普通组件。7.3.1Swing中的顶层容器

JFrame类;

JFrame类是java.awt包中Frame类的子类,它继承了Frame类的很多方法,同时JFrame类还有很多特性.

JApplet类;JApplet类是java.awt包中Applet类的子类,它继承了Frame类的很多方法,同时JApplet类还有很多特性.

JDialog类.

JDialog是java.awt包中Dialog类的子类,必须依赖于一个JFrame对象.应用案例见例7-23,例7-24,例7-257.3.2Swing中的中间层容器

JPanel面板;(JPanel容器的默认布局是FlowLayout,JPanel类有两个构造方法为JPanel()和JPanel(布局对象)。JScrollPanel面板;(

JScrollPanel类提供了布局管理器JScrollPanelLayout用来设定布局,有两个构造方法为JScrollPanel()和JScrollPanel(Componentc)。JSplitPane面板

温馨提示

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

评论

0/150

提交评论