Java语言教学课件:11-AWT编程_第1页
Java语言教学课件:11-AWT编程_第2页
Java语言教学课件:11-AWT编程_第3页
Java语言教学课件:11-AWT编程_第4页
Java语言教学课件:11-AWT编程_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、11.AWT编程本章要点GUI与AWTAWT容器与布局管理器对话框事件机制AWT绘图机制剪贴板图形用户界面 作为一个程序设计者,必须优先考虑用户的感受,一定要让用户感到“爽”,我们的程序才会被需要、被使用,这样的程序才有价值。 当JDK1.0发布时,Sun提供了一个基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行,这套基本类库被称为“抽象窗口工具集(Abstract Window Toolkit)”,它为Java应用程序提供了基本的图形组件。 AWT简介当JDK1.0发布时,Sun提供了一个基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行,这套基本类库被称为“抽象窗口工

2、具集(Abstract Window Toolkit)”,它为Java应用程序提供了基本的图形组件。 AWT (Abstract Window Tools):抽象窗口工具AWT的问题使用AWT作出的图形用户界面在所有平台上都显得很丑陋,功能也非常有限。AWT为了迎合所有主流操作系统的界面设计,AWT组件只能使用这些操作系统上图形界面组件的交集,所以不能使用特定操作系统上复杂的图形界面组件,最多只能使用四种字体。AWT用的是非常笨拙的,非面向对象的编程模式。 Swing组件Swing为绝大部分的界面组件都提供了实现。这些界面组件都是直接绘制空白区域上。Swing自己实现了这些界面组件,因此Swi

3、ng无需使用各操作系统上界面组件的交集。由于Swing不再需要调用操作系统上相应的界面组件,Swing的UI界面更加统一。java.awt包在这个包中,提供了基本的java程序GUI设计工具:Component/MenuComponentContainerLayoutManagerContainer(容器)容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。容器类对象可使用方法add()添加组件两种主要的容器类型Window:可独立存在的顶级窗口Panel:可作为容器容纳其它组件,但不能独立存在,必

4、须被添加到其它容器中(如Window 或 Applet)Container层次关系图ContainerPanelAppletWindowFrameScrollPaneDialogContainer常用方法add()setLocation():设置位置。setSize():设置大小setBoundes():同时设置大小、位置。setVisible()pack()组件定制组件的大小和位置由布局管理器(LayoutManager)决定。不使用布局管理器则可以定制组件的大小和位置,但必须在容器中使用组件的setLocation(), setSize(), setBounds()方法确定大小位置Fram

5、e类代表一个窗口。是Window类的子类有标题,可通过拖拉改变大小初始化时为不可见,可用setVisible(true)使其显示出来使用BorderLayout作为其缺省布局管理器使用setLayout方法改变布局管理器Panel为放置组件提供空间允许使用自己的布局管理器不能单独存在,必须放置到其他容器中Container的布局管理器为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。Container的布局管理器AWT中的布局管理器有:FlowLayoutBorderLayoutGridLa

6、youtCardLayoutGridBagLayoutFlowLayoutGUI Component从左到右按顺序配置在Container中,若到达右边界,则会折回到下一行中FlowLayout是Panel和Applet的默认管理器FlowLayout()/ FlowLayout(int align)/ FlowLayout(int align,int hgap,int vgap)FlowLayout.LEFT/ FlowLayout.CENTER/ FlowLayout.RIGHT默认为靠中对齐使用组件的理想尺寸BorderLayoutBorderLayout将Container分为EAST

7、、SOUTH、WEST、NORTH、CENTER五个区域,Component可以放置在这五个区域的任何一个BorderLayout是Frame、Dialog的默认管理器每个区域只能放一个组件。如果在一个区域中放入多个Component,后放入的Component会把前面的覆盖BorderLayout()/ BorderLayout(int hgap,int vgap) BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.CENTERBorderLayout(con.)Bor

8、derLayout布局格式:当改变容器大小时当某个区域没有组件时,它的空间会被自动占满。North, South和Center区域水平调整East, West和Center区域垂直调整North South West East CenterGridLayoutGridLayout将Component配置在纵横格线分割的格子中,从左到右,从上到下;构造器:GridLayout()/ GridLayout(int rows,int cols)/ GridLayout(int rows,int cols,int hgap,int vgap) GridBagLayoutGridBagLayout布局管

9、理器是功能最强大,但也是最复杂的布局管理器,与GridLayout布局管理器不同的是:在GridBagLayout布局管理器中,一个组件可以跨越一个或多个网格,并可以设置各网格的大小互不相同,从而增加了布局的灵活性。当窗口的大小发生变化时,GridBagLayout布局管理也可以准确地控制窗口各部分的反应。为了处理GridBagLayout中GUI组件的大小、跨越性,Java提供了GridBagConstraints对象,该对象与特定的GUI组件关联,用于控制该GUI组件的大小、跨越性。CardLayout将加入到Container中的Component看成一叠卡片,只有最上面的那个Compo

10、net才可见构造器:CardLayout()/ CardLayout(int hgap,int vgap)控制组件可见的方法:first(Container target) / last(Container target) /previous(Container target) /next(Container target) /show(Container target,String name)CardLayout将加入到Container中的Component看成一叠卡片,只有最上面的那个Componet才可见构造器:CardLayout()/ CardLayout(int hgap,int

11、 vgap)控制组件可见的方法:first(Container target) / last(Container target) /previous(Container target) /next(Container target) /show(Container target,String name)绝对定位Java也提供了那种拖控件的方式,即Java也可以对GUI组件进行绝对定位。在Java容器中采用绝对定位的步骤如下: (1)将Container的布局管理器设成null:setLayout(null)。(2)往容器上加组件的时候,先调用setBounds()或setSize()方法来先设

12、置组件的大小、位置。或者直接创建GUI组件时通过构造参数指定该组件的大小、位置,然后将该组件添加到容器中。BoxLayout布局管理器 GridBagLayout布局管理器虽然功能强大,但它是在太复杂了,以Swing引入了一个新的布局管理器:BoxLayout。它保留了GridBagLayout的很多优点,但是却没那么复杂。BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout提供了一个如下的简单构造器:BoxLayout(Container target, int axis):指定创建基于target容器的BoxLayout布局管理器,该布局管理器里组件案axis方向

13、排列。其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向。基本组件 Button:按钮,可接收单击操作。Canvas:用于绘图的画布。Checkbox:复选框组件(也可变成单选框组件)。CheckboxGroup:用于将多个Checkbox组件组合成一组,一组Checkbox组件将只有一个可以被选中,即全部变成单选框组件。Choice:下拉式选择框组件。Frame:窗口,在GUI程序里通过该类创建窗口。Label:标签类,用于放置提示性文本。List。列表框组件,可以添加多项条目。Panel:不能单独存在基本容器类,必须放到其他容器中。Sc

14、rollbar:滑动条组件。如果需要用户输入位于某个范围的值,就可以使用滑动条组件。如调色板中设置RGB的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、滑块的大小、最小值和最大值。ScrollPane:带水平及垂直滚动条的容器组件。TextArea:多行文本域。TextField:单行文本框。 对话框 对话框是Window类的子类,是一个容器类,属于特殊组件。对话框也是可以独立存在的顶级窗口,因此用法与普通窗口用法几乎完全一样。但对话框有两点需要注意:对话框必须依赖于其他窗口,就是必须有一个parent窗口。对话框有非模式(non-modal)和模式(modal)两种,当某

15、个模式对话框被打开之后,该模式对话框总是位于它依赖的窗口之上;在模式对话框被关闭之前,它依赖的窗口无法获得焦点。对话框有多个重载的构造器,它的构造器可能有如下三个参数:owner:指定该对话框所依赖的窗口,既可以是窗口,也可以是对话框。title:指定该对话框的窗口标题。modal:指定该对话框是否是模式的,可以是true或false。 FileDialogDialog类还有一个子类:FileDialog,它代表一个文件对话框,用于打开、或者保存文件,FileDialog也提供了几个构造器,分别可支持parent、title和mode三个构造参数,其中parent、title指定文件对话框的所

16、属父窗口和标题,而mode用于指定该窗口用于打开文件、或保存文件,该参数支持如下两个参数值:FileDialog.LOAD、FileDialog.SAVE。事件处理事件(Event) 一个对象,它描述了发生什么事情 事件源(Event source) 产生事件的组件事件处理方法(Event handler) 能够接收、解析和处理事件类对象、实现和用户交互的方法AWT的事件处理方式委派式事件处理(delegation)-个别的组件将整个事件处理委托给特定的对象,当该组件发生指定的事件时,就通知所委托的对象,有这个对象来处理这个事件。这个受委托处理事件的对象称为事件倾听对象(event liste

17、ner)每个组件均可以针对特定的事件指定一个或多个事件倾听对象,由这些事件倾听对象负责处理事件AWT事件分类 EventObjectActionEventAdjustmentEventAWTEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventKeyEventMouseEventComponentEvent窗口事件当一个窗口被激活、撤销激活、打开、关闭、最大化、最小化时,发生窗口事件。从WindowEvent类中创建的对象表示窗口事件。不同事件类型的接口和方法分类接口名方法ActionActi

18、onListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)Mouse MotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)MouseMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseClicked(MouseEvent)mouseExited(MouseEvent)KeyK

19、eyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvnet)focusLost(FocusEvent)分类接口名方法AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componen

20、tResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)ContainerContainerListenercomponen

21、tAdded(ContainerEvent)componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)不同事件类型的接口和方法事件适配器(Adapter)为简化编程,针对大多数事件监听器接口定义了相应的实现类-事件适配器类,在适配器类中,实现了相应监听器接口中所有的方法,但不做任何事情。在定义监听器类时就可以继承事件适配器类,并只重写所需要的方法。事件处理类的形式利用内部类来处理事件用匿名内部类处理事件定义一个事件监听器类直接在当前类中处理创建菜单创建一个菜单步骤:创建一个MenuBar对象,将其放置到

22、菜单容器中(如Frame)创建若干个Menu对象,将其放置到MenuBar对象中创建若干个MenuItem对象,将其放置到Menu对象中MenuItem包括MenuItem:普通的菜单项CheckboxMenuItem:可以选择的菜单项右键菜单右键菜单使用PopupMenu对象表示,创建右键菜单的步骤如下:(1)创建PopupMenu的实例。(2)创建多个MenuItem实例,依次将这些实例加入PopupMenu中。(3)将PopupMenu加入到目标组件之中。(4)为需要出现上下文菜单的组件编写鼠标监听器,当用户释放鼠标右键时弹出右键菜单。在AWT中画图通常,创建Canvas类或Panel的

23、子类,并覆盖paint方法每当组件出现时调用paint方法每个组件都有一个Graphics对象Graphics类实现了很多绘图方法AWT中的坐标(0,0)(x,y)x轴y轴Graphics类Graphics是一个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何图形和位图,Graphics类提供了如下几个方法用于绘制几何图形和位图:drawLine:绘制直线。drawString:绘制字符串。drawRect:绘制矩形。drawRoundRect:绘制圆角矩形。drawOval:绘制椭圆形状。drawPolygon:绘制多边形边框。drawArc:绘制一段圆弧(可能是椭圆的圆弧)。

24、drawPolyline:绘制折线。fillRect:填充一个矩形区域。fillRoundRect:填充一个圆角矩形区域。fillOval:填充椭圆区域。fillPolygon:填充一个多边形区域。fillArc:填充圆弧和圆弧两个端点到中心连线所包围的区域。drawImage:绘制位图。BufferedImage实现类 Image类代表了位图,但它是一个抽象类,无法直接创建Image对象,为此Java为它提供了一个BufferedImage实现类,它是一个可访问图像数据缓冲区的Image实现类。该类提供了一个简单的构造器,用于创建一个BufferedImage对象:BufferedImage

25、(int width, int height, int imageType):创建指定大小、指定图象类型的BufferedImage对象,其中imageType可以是BufferedImage.TYPE_INT_RGB、BufferedImage.TYPE_BYTE_GRAY等值。除此之外,BufferedImage还提供了一个getGraphics()方法返回该对象的Graphics对象,从而允许通过该Graphics对象向Image中添加图形。借助于BufferedImage的帮助,我们可以在AWT中实现缓冲技术:当我们需要向GUI组件上绘制图形时,不要直接绘制到该GUI组件上,而是先将图

26、形绘制到BufferedImage对象中,然后再调用组件的drawImage一次性地将BufferedImage对象绘制到特定组件上。ImageIO输入/输出位图 ImageIO类并不能支持读写全部格式的图形文件,程序可以通过ImageIO类的如下几个静态方法来访问该类所支持读写的图形文件格式:getReaderFileSuffixes():返回一个 String 数组,该数组列出ImageIO所有能读的图形文件的文件后缀。getReaderFormatNames():返回一个 String 数组,该数组列出ImageIO所有能读的图形文件的非正式格式名称。static String getW

27、riterFileSuffixes():返回一个 String 数组,该数组列出ImageIO所有能写的图形文件的文件后缀。static String getWriterFormatNames():返回一个 String 数组,该数组列出ImageIO所有能写的图形文件的非正式格式名称。 剪贴板 AWT支持两种剪贴板:系统剪贴板和本地剪贴板,如果在同一个虚拟机的不同窗口之间进行数据传递,则无需使用系统剪贴板,使用系统剪贴板就可以了。系统剪贴板则与运行平台无关,可以传输任意格式的数据。使用系统剪贴板Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();传递

温馨提示

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

评论

0/150

提交评论