Java语言程序设计第9章_第1页
Java语言程序设计第9章_第2页
Java语言程序设计第9章_第3页
Java语言程序设计第9章_第4页
Java语言程序设计第9章_第5页
已阅读5页,还剩66页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、第9章 图形用户界面郑 莉JAVA语言程序设计1内容Applet 概述Applet应用程序接口绘图Swing基础Swing的特点和概念Swing组件其它Swing特性2Applet 概述Java Applet是一种嵌入HTML文档中的Java程序。与Application相比,Applet具有明显的优点:web浏览器提供了运行Applet所需要的许多功能;Applet是在运行时通过网络从服务器端下载的,因而便于软件的发布和及时更新。但是Applet也有其局限性,由于安全的原因Applet不能在客户机上读写当地文件,也不能连接除它所在的服务器以外的其它机器。3例9-1在浏览器中加载一个Apple

2、t,功能是显示一个字符串“This is a Java Applet!”。import java.awt.Graphics;import javax.swing.JApplet; public class Ex9_1 extends JApplet public void paint(Graphics g) /重载JApplet类中的paint方法 /参数是Graphics类的对象,是由浏览器传递过来的 super.paint(g); /调用其超类JApplet类的paint方法 g.drawString(This is a Java Applet!,25,25); 4Applet应用程序接口

3、(API)5方法调用时机和用途public void init()当浏览器(即Applet容器)载入某个Applet时,容器会自动创建这个Applet类的一个实例,并调用它的init方法。在Applet执行期间,容器只调用init方法一次,通常用来初始化类的成员变量(域)和创建Applet的图形用户界面,加载要播放的音频,创建线程。public void start()init方法执行结束之后,自动调用这个方法。另外,当浏览器用户在访问另一个网址之后重新返回Applet所在的HTML页时,将再次调用start方法。通常用于启动动画和启动其他线程。public void paint(Graphi

4、cs g)start方法启动后调用此方法,另外每次需要重绘Applet时也将调用该方法。它通常使用容器传递给paint方法的Graphics对象g进行画图。程序通常不直接调用paint。public void repaint()Applet从java.awt.Component类继承了此方法。获取一个Graphics对象,调用paint。它不需要Graphics对象作为参数。在响应用户和Applet的交互时经常要用到。通常用户只是调用,而不重写这个方法。public void stop()用户离开Applet所在的HTML页时调用该方法。它执行挂起Applet所需的所有任务,例如停止动画和线程

5、。public void destroy()用户关闭浏览器窗口,Applet将从内存中移走的时候调用该方法。6一个简单的Appletimport java.awt.Graphics;import javax.swing.JApplet; public class Simple extends Applet StringBuffer buffer; public void init() buffer = new StringBuffer(); addItem(initializing. ); public void start() addItem(starting. ); 7 public vo

6、id stop() addItem(stopping. ); public void destroy() addItem(preparing for unloading.); void addItem(String newWord) buffer.append(newWord); repaint(); public void paint(Graphics g) /Draw a Rectangle around the applets display area. g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); /Draw

7、the current string inside the rectangle. g.drawString(buffer.toString(), 5, 15); 8HelloSwingAppletimport javax.swing.*;.import java.awt.*;public class HelloSwingApplet extends JApplet public void init() JLabel label = new JLabel( You are successfully running a Swing applet!); label.setHorizontalAlig

8、nment(JLabel.CENTER); label.setBorder(BorderFactory.createMatteBorder( 1,1,2,2,Color.black); getContentPane().add(label, BorderLayout.CENTER); 9图形环境和图形对象坐标GUI组件的左上角坐标默认为(0,0)从左上角到右下角,水平坐标x和垂直坐标y增加。坐标的单位是象素Graphics对象Graphics对象是专门管理图形环境的。Graphics类是一个抽象类。设计一个抽象类Graphics可以给程序员提供一个与平台无关的绘图接口,因而程序员就可以以独立于

9、平台的方式来使用图形。在各个平台上实现的Java系统将创建Graphics类的一个子类,来实现绘图功能,但是这个子类对程序员是透明的,也就是说我们只能看得到Graphics类,却不必关心其实现。在执行paint方法时,系统会传递一个指向特定平台的Graphics子类的图形对象g绘 图10 颜色Color类在java.awt包中Color的一些属性和方法,以及与Color相关的方法:名称描述public final static Color GREEN常量 绿色 public final static Color RED常量 红色public Color(int r,int g,int b)通过

10、指定红、蓝、绿颜色分量(0255),创建一种颜色public int getRed()返回某颜色对象的红色分量值(0255)Graphics:public void setColor(Color c)Graphics类的方法,用于设置组件的颜色Graphics:public Color getColor()Graphics类的方法,用于获得组件的颜色绘 图11字体Font类 在java.awt包中Font的一些属性和方法,以及与Font相关的方法:名称描述public final static int PLAIN一个代表普通字体风格的常量public final static int BOLD

11、一个代表黑体字体风格的常量public final static int ITALIC一个代表斜体字体风格的常量public Font(String name,int style,int size)利用指定的字体、风格和大小创建一个Font对象public int getStyle()返回一个表示当前字体风格的整数值public Boolean isPlain()测试一个字体是否是普通字体风格Graphics:public Font getFont()获得当前字体Graphics:public void setFont(Font f)设置当前字体为f指定的字体、风格和大小绘 图12使用Grap

12、hics类绘图Graphics对象可以绘制文本、线条、矩形、多边形、椭圆、弧等多种图形名称描述public void drawString(String str, int x, int y)绘制字符串,左上角的坐标是(x,y)public void drawLine(int x1, int y1, int x2, int y2)在(x1,y1)与(x2,y2)两点之间绘制一条线段public void drawRect(int x, int y, int width, int height)用指定的width和height绘制一个矩形,该矩形的左上角坐标为(x,y)public void fi

13、llRect(int x, int y, int width, int height)用指定的width和height绘制一个实心矩形,该矩形的左上角坐标为(x,y)绘 图13public void clearRect(int x, int y, int width, int height)用指定的width和height,以当前背景色绘制一个实心矩形。该矩形的左上角坐标为(x,y)public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)用指定的width和height

14、绘制一个圆角矩形,圆角是一个椭圆的1/4弧,此椭圆由arcWidth、arcHeight确定两轴长。其外切矩形左上角坐标为(x,y)public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)用当前色绘制实心圆角矩形,各参数含义同drawRoundRect。public void draw3DRect(int x, int y, int width, int height, boolean b)用指定的width和height绘制三维矩形,该矩形左上角坐标是(x,y),b为

15、true时,该矩形为突出的,b为false时,该矩形为凹陷的。public void fill3DRect(int x, int y, int width, int height, boolean b)用当前色绘制实心三维矩形,各参数含义同draw3DRect。public void drawPolygon(intxPoints, int yPoints, int nPoints)用xPoints,yPoints数组指定的点的坐标依次相连绘制多边形,共选用前nPoints个点。14public void fillPolygon(int xPoints, int yPoints, int nPo

16、ints)绘制实心多边形,各参数含义同drawPolygon。public void drawOval(int x, int y, int width, int height)用指定的width和height,以当前色绘制一个椭圆,外切矩形的左上角坐标是(x,y)。public void fillOval(int x, int y, int width, int height)绘制实心椭圆,各参数含义同drawOval。public void drawArc(int x, int y,int width, int height, int startAngle, int arcAngle)绘制指

17、定width和height的椭圆,外切矩形左上角坐标是(x,y),但只截取从startAngle开始,并扫过arcAngle度数的弧线。public void fillArc(int x, int y,int width, int height, int startAngle, int arcAngle)绘制一条实心弧线(即扇形),各参数含义同drawArc15例9-2用各种颜色绘制文字及各种图形ex9_2.java绘 图16使用Graphics2D类绘图Java2D API提供了高级的二维图形功能。这些API分布在java.awt、java.awt.image、java.awt.color、

18、java.awt.font、java.awt.geom、java.awt.print和java.awt.image.renderable包中。它能轻松使你完成以下功能:绘制任何宽度的直线用渐变颜色和纹理来填充图形平移、旋转、伸缩、切变二维图形,对图像进行模糊、锐化等操作构建重叠的文本和图形绘 图17例9-3实现例9_1的功能,使用Java2D使文字出现渐变色效果ex9_3.java绘 图18JFC与SwingJFCJava 基础类是关于GUI 组件和服务的完整集合作为JDK1.2 的一个有机部分,主要包含5 个API:AWT,Java2D,Accessibility,Drag & Drop,S

19、wing。SwingJFC 的一部分提供按钮、窗口、表格等所有的组件。纯Java组件(完全用Java写的)Swing基础19Swing与AWTJDK1.0的AWT API只有重量级组件AWT提供给程序员的是对窗体界面系统的抽象,而在内部实现中,针对每一种操作系统,分别有不同实现,这就是同位体(Peer)的概念。当程序员调用AWT对象时,调用被转发到对象所对应的一个Peer上,在由Peer调用本地对象方法,完成对象的显示。例如,如果你使用AWT创建了一个Menu类的实例,那么在程序运行时会创建一个菜单同位体的实例,而由创建的同位体的来实际执行菜单的现实和管理。不同的系统,有不同的同位体实现,So

20、laris JDK将产生一个Motif菜单的同位体,Windows下的JDK将产生一个Windows的菜单的同位体,等等。同位体的使用,使得交叉平台窗口工具的开发变得极为迅速,因为同位体的使用可以避免重新实现本地窗口控件中已经包含的方法。JDK1.1引入了轻量级组件没有同位体Swing基础20Swing与AWTSwingJava1.2推出Swing。大部分是轻量级组件(纯Java)。架构在 AWT 之上,是AWT的扩展而不是取代。Swing基础21Swing 综述Swing GUI 组件javax.swing包源于AWT(package java.awt)的组件包括外观和感觉外观以及用户如何和

21、程序交互轻量级组件完全用Java写成,不是用当前平台的GUI功能某些Swing组件也是重量级的,外观和功能受到本地窗口系统的限制,如java.awt.Windows的子类java.applet.Applet的子类Swing基础22Swing的组件和容器层次Swing的特点和概念很多 Swing 组件共同的父类:23Swing的组件和容器层次Component 类包含paint方法,可以在屏幕上绘制组件。大多数GUI组件直接或间接扩展Component。Container 类容纳相关组件包括方法add,用来添加组件。JComponent 类多数Swing组件的超类可抽换的外观和感觉,即可根据需求

22、定制外观和感觉。快捷键 (通过键盘直接访问GUI组件)一般的事件处理功能。Swing的特点和概念24顶级Swing 容器每一个Swing GUI程序至少要包含一个顶级Swing容器顶级容器支持Swing 组件执行绘图和事件处理。有三个顶级Swing 容器JFrame 实现单个主窗口JDialog 实现一个二级窗口JApplet 在浏览器窗口中实现一个applet显示区域。Swing的特点和概念25图形用户界面(GUI)简介赋予程序不同的外观和感觉(look and feel,即程序与用户进行交互的界面和方式)为用户提供基本熟悉的程序界面通过GUI组件(控制组件,装饰组件等)来构造用户通过鼠标键

23、盘等和GUI交互.Swing的特点和概念26一些基本的GUI 组件27布局管理内容面板(content pane)默认使用的将组件放置到五个区域:东、西、南、北、中Swing的特点和概念28布局管理JPanel默认使用的简单地把组件放在一行,如果容器宽度不足以容纳所有组件,就会自动开始新的一行Swing的特点和概念29布局管理GridLayout将按照其构造方法中提供的行数和列数将界面分为等大的若干块,组件被等大地按加载顺序放置其中Swing的特点和概念30布局管理CardLayout可以实现在一个区域出现不同的组件布局,就像在一套卡片中选取其中的任意一张一样。这里通过组合框像选择卡片一样选择

24、某一种布局Swing的特点和概念31布局管理GridBagLayout把组件放置在网格中,这一点类似于GridLayout,但它的优点在于不仅能设置组件摆放的位置,还能设置该组件占多少版面空间。Swing的特点和概念32布局管理BoxLayout将组件放在单一的行或列中,和FlowLayout不同的是,它可以考虑到组件的对齐方式Swing的特点和概念33布局管理SpringLayout是一种灵活的布局管理器。它能够精确指定组件之间的间距。组件之间的距离通过Spring类的对象来表示,每个spring有四个属性,最小值,最大值,优选值和实际值。Swing的特点和概念34布局管理器的运用默认布局J

25、Panel 默认为 FlowLayout 内容面板默认为 BorderLayout 改变布局JPanel pane = new JPanel();pane.setLayout(new BorderLayout();Swing的特点和概念35外观和感觉Java 外观和感觉CDE/Motif外观和感觉Windows外观和感觉Swing的特点和概念36在Applet和Application中应用Swing例9-4应用Swing组件的Appletex9_4.java例9-5应用Swing组件的Aplicationex9_5.javaSwing的特点和概念37例9_6运用三层容器结构ex9_6.java

26、Swing的特点和概念38事件处理每次用户输入字符或按下鼠标按钮,都有一个事件产生. 对象可以收到事件通知对象应实现适当的接口,并注册为相应事件源的监听器。Swing的特点和概念39事件处理机制事件处理机制的三个部分事件源与用户进行交互的GUI组件事件对象封装了有关已发生的事件的信息事件监听器监听事件,并在运行时响应事件程序员应完成的两项任务为事件源注册一个事件监听器实现事件处理方法Swing的特点和概念40java.awt.event中的一些类ObjectEventObjectAWTEventActionEventAdjustmentEventItemEventTextEventContai

27、nerEventFocusEventPaintEventWindowEventInputEventMouseWheelEventComponentEventKeyEventMouseEventObjectEventObjectAWTEventComponentEventTextEventItemEventAdjustmentEventActionEventWindowEventInputEventMouseEventKeyEventMouseWheelEventFocusEventPaintEventContainerEventSwing的特点和概念41java.awt.event中的监听器接

28、口 interface EventListener interface ActionListener interface AdjustmentListener interface ComponentListener interface ContainerListener interface FocusListener interface ItemListener interface KeyListener interface MouseListener interface MouseMotionListener interface TextListener interface WindowLi

29、stenerinterfaceEventListenerinterfaceActionListenerinterfaceAdjustmentListenerinterfaceComponentListenerinterfaceContainerListenerinterfaceFocusListenerinterfaceItemListenerinterfaceKeyListenerinterfaceMouseListenerinterfaceMouseMotionListenerinterfaceTextListenerinterfaceTextListenerSwing的特点和概念42实现

30、事件处理器实现监听器接口public class MyClass implements ActionListener / 把一个事件处理器的实例注册为监听器someComponent.addActionListener(instanceOfMyClass); 实现监听器接口中的方法public void actionPerformed(ActionEvent e) ./code that reacts to the action. Swing的特点和概念43使用匿名内部类button.addActionListener(new ActionListener() public void acti

31、onPerformed(ActionEvent e) numClicks+; label.setText(labelPrefix + numClicks); );Swing的特点和概念44举例例9_7 创建一窗口,当鼠标在窗口中点击时,在窗口标题栏中显示点击位置坐标方法一:实现Listener接口ex9_7_1.java方法二:继承Adapter类ex9_7_1.java方法三:使用匿名内部类ex9_7_3.javaSwing的特点和概念45Swing 组件为了显示在屏幕上,每个组件必须是一套包容结构的一部分。包容结构是一个以顶层容器为根的树状组件集合。每个组件只能放置在某个容器内一次。如果某

32、个组件已经在一个容器中,若想把它加到另外一个容器中,这个组件就会从第一个容器中清除。每个顶层容器都有一个内容面板,通常直接或间接的容纳别的可视组件。可以有选择地为顶层容器添加菜单,菜单被放置在顶层容器上,但是在内容面板之外。46应用顶层容器Swing提供了3个顶层容器类:JFrame、JApplet、JDialog。这3个顶层容器必须直接和操作系统打交道,所以都是重量级组件,它们分别继承自原来的AWT组件Frame、Applet、Dialog。Swing 组件47JFrame的继承结构java.lang.Object java.awt.Component java.awt.Container

33、java.awt.Window java.awt.Frame javax.swing.JFrame 每个包含Swing 组件的主窗口都应用JFrame 来实现。Swing 组件48JApplet 的继承结构java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.awt.Applet javax.swing.JApplet 每个包含Swing 组件的Applet 都应作为JApplet 的子类来实现Swing 组件49JDialog的继承结构java.lang.Object java.awt.Compo

34、nent java.awt.Container java.awt.Window java.awt.Dialog javax.swing.JDialog要实现对话框,需要从JDialog派生一个类Swing 组件50举例FrameDemo.javaTopLevelDemo.javaSwing 组件51中间容器中间层容器存在的目的仅仅是为了容纳别的组件,它分为两类:一般用途的有JPanel、JScrollPane、JSplitPane、JTabbedPane、JToolBar特殊用途的有JInternalFrame、JRootPaneSwing 组件52JpanelJPanel类为轻型组件提供一般

35、目的的容器。默认情况下除了背景外不画任何东西,不过可以很容易地添加边框Swing 组件53Jpanel示例Converter.java ConversionPanel.java,ConverterRangeModel.java,DecimalField.java,FollowerRangeModel.java,FormattedDocument.java,Unit.java 54JScrollPaneJScrollPane为组件提供一个可滚动的视图JScrollPane由九个部分组成Swing 组件55JScrollPane示例ScrollDemo.java Rule.java Corner.java ScrollablePicture.java Swing 组件56JSplitPane显示两个组件,并列或上下安放 拖动分界线可以调整两边的比例 嵌套使用JSplitPane可以将屏幕分割成多个部分通常先把组件放到Scroll Pane中,再把Scroll Pane放到Split Pane中。这样在每部分窗口中,都可以拖动滚动条看到组件的全部内容。Swing 组件57JSplitPane示例SplitPaneDemo.javaSwing 组件58JTabbedPane给

温馨提示

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

评论

0/150

提交评论