Java图形用户界面第7章.ppt
《Java图形用户界面第7章.ppt》由会员分享,可在线阅读,更多相关《Java图形用户界面第7章.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 7 章图形用户界面程序设计本章主要内容l图形用户界面(图形用户界面(GUI)lJava的基本绘图的基本绘图lSwing 组件设计组件设计l布局管理器布局管理器一、图形用户界面(GUI)GUI是用图形的方式,借助于菜是用图形的方式,借助于菜单、按钮等标准界面元素和鼠标单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统发出指令、启动操作,并将系统运行的结果也以同样的方式系统运行的结果也以同样的方式显示给用户的技术。显示给用户的技术。AWT AWT(Abstract Window Toolkit)译为译为抽象窗口工具包抽象窗口工具
2、包,它是,它是 Java 语言为建立图形用户界面提供的语言为建立图形用户界面提供的API。其主要功能包括:其主要功能包括:q 用户界面组件用户界面组件q 事件处理模型事件处理模型q 图形和图像工具图形和图像工具q 布局管理器布局管理器Swing Java最最初初作作为为网网络络编编程程工工具具,提提供供的的AWT功功能能比比较较弱弱,只只能能用用来来支支持持必必要要的的用用户户界界面面组组件件。随随着着Java被被越越来来越越多多的的业业内内人人士士认认可可,应应用用范范围围的的迅迅猛猛扩扩展展,Sun公公司司意意识识到到需需要要对对AWT的的设设计计进进行行修修改改,以以适适应应于于更更加加
3、广广泛泛的的开开发发目目的的,于于是是就就诞诞生生了了Swing。Swing是是继继AWT之之后后,更更加加丰丰富富、功功能能更更加加强强大大的的GUI工工具具包包,它它构构成成了了JFC(Java Foundation Class)的的图图形形用户界面功能的核心部分。用户界面功能的核心部分。Swing与AWT的主要区别lAWT是是基基于于同同位位体体(Peer)的的体体系系结结构构,这这种种设设计计策策略略严严重重限限制制了了用用户户界界面面中中可可以以使使用用的的组组件件种种类类及及功功能能,成成为为一一个个致致命命的的缺缺憾憾;而而Swing不不需需要要本本地地提提供供同同位位体体,这这
4、样样可可以以给给设设计计者者带带来来更更大大的的灵灵活性,有利于增强组件的功能。活性,有利于增强组件的功能。l在在AWT中中,有有一一部部分分代代码码是是用用C编编写写的的;而而Swing是是100%的的纯纯Java,增增强强了了应应用程序的与环境无关性。用程序的与环境无关性。Swing与AWT的主要区别lSwing具具有有控控制制外外观观(Pluggable look and feel)的的能能力力,即即允允许许用用户户自自行行定定制制桌桌面面的的显显示示风风格格,比比如如,更更换换配配色色方方案案,让让窗窗口口系系统统更更加加适适应应用用户户的的习习惯惯和和需需要要,而而AWT 组组件件完
5、完全全依依赖赖于本地平台。于本地平台。l增增加加了了裁裁剪剪板板、鼠鼠标标提提示示、拖拖放放和和打打印等功能。印等功能。与图形用户界面有关的包ljava.awt 与绘图相关的类与绘图相关的类ljava.event 与事件处理相关的类与事件处理相关的类ljavax.swing 与与Swing组件相关的类组件相关的类二、Java的基本绘图l绘图类绘图类 Graphicsl颜色类颜色类 Colorl字体类字体类 Font1、绘图类GraphicslJava的图形处理主要由的图形处理主要由 AWT中的中的Graphics类实现。该类支持两种类类实现。该类支持两种类型的绘图功能:利用绘图成员方法型的绘图
6、功能:利用绘图成员方法绘图和显示图象。绘图和显示图象。lGraphics是一个抽象类。在这个类是一个抽象类。在这个类中封装了所有的绘图操作。中封装了所有的绘图操作。Graphics类中的绘图成员方法void drawLine(int startX,int startY,int endX,int endY);void drawRect(int x,int y,int width,int height);void fillRect(int x,int y,int width,int height)void drawRoundRect(int x,int y,int width,int height
7、,int arcWidth,int arcHeight);void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight);void draw3DRect(int x,int y,int width,int height,boolean raised);void fill3DRect(int x,int y,int width,int height,boolean raised);void drawOval(int x,int y,int width,int height);void fillOval
8、(int x,int y,int width,int height);Graphics类中的绘图成员方法 void drawArc(int x,int y,int width,int height,int startAngle,int endAngle);void fillArc(int x,int y,int width,int height,int startAngle,int endAngle);void drawString(String str,int x,int y);void drawPloygon(int xPoints,int yPoints,int numPoints);v
9、oid fillPloygon(int xPoints,int yPoints,int numPoints);利用利用GraphicsGraphics类提供的成员方法绘图的基本步骤类提供的成员方法绘图的基本步骤l创建绘图类对象创建绘图类对象l调用调用Graphics提供的成员方法绘图提供的成员方法绘图=创建绘图类对象的方法:创建绘图类对象的方法:l在在Swing组件中,通过组件中,通过paintComponent()成员方法的参数获得绘图类对象成员方法的参数获得绘图类对象l利用组件的利用组件的getGraphics()成员方法显式成员方法显式地创建绘图对象,并用地创建绘图对象,并用dispos
10、e()释放释放import java.awt.*;import javax.swing.*;public class GraphicsDemo extends JPanelpublic static void main(String agrs)JFrame frm=new JFrame(绘图应用范例绘图应用范例);frm.getContentPane().add(new GraphicsDemo();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setSize(380,200);frm.setVisible(true);publi
11、c void paintComponent(Graphics g)/刷新面板时,系统自动调用这个成员方法刷新面板时,系统自动调用这个成员方法 super.paintComponent(g);g.drawString(绘图对象绘图对象,5,40);g.drawLine(5,50,150,50);g.drawRect(5,55,50,50);g.fillRect(5,110,50,50);g.drawRoundRect(60,55,50,50,30,30);g.fillRoundRect(60,110,50,50,30,30);g.drawOval(115,55,50,50);g.fillOval
12、(115,110,50,50);g.drawArc(100,5,100,100,0,45);g.fillArc(155,5,100,100,0,45);int x_vals=170,170,210,250,210;int y_vals=60,100,100,80,60;g.drawPolygon(x_vals,y_vals,x_vals.length);for(int i=0;i5;i+)y_valsi+=55;g.fillPolygon(x_vals,y_vals,x_vals.length);g.fill3DRect(260,5,100,70,true);g.fill3DRect(260,
13、90,100,70,false);2、2D绘图方式 利用利用Graphics类中提供的方法实类中提供的方法实现绘图,其功能十分有限。从现绘图,其功能十分有限。从JDK1.2版本以后,版本以后,Java提供了一提供了一种种2D库,它体现了面向对象设计库,它体现了面向对象设计方法的思想。其中,包含了强大的方法的思想。其中,包含了强大的绘图功能。绘图功能。Graphics与Graphics2D的主要区别Graphics类类以以成成员员方方法法的的形形式式封封装装了了绘绘制制各各种种图图形形的的工工具具,而而Graphics2D将将绘绘制制的的所所有有图图形形用用相相应应的的类类对对象象标标识识,这这
14、 是是 它它 们们 两两 个个 的的 主主 要要 区区 别别。与与Graphics相相比比,Graphics2D提提供供的的几几何何图图形形控控制制、坐坐标标转转换换、颜颜色色管管理理和和文文本本布布局局的的功功能能更更加加强强大大,使使用用起起来来更加灵活。更加灵活。Graphics2D类 利用Java 2D绘制图形时所需要的绘图工具都包含在Graphics2D类对象中,通 常 将 此 称 为 图 形 设 备 文 本(graphics context)。无论希望在组件表面绘制什么图形,都要拥有一个图形设备文本对象,通过它实现绘制直线、曲线、各种几何图形、填充几何图形等一系列绘图操作。获取Gr
15、phics2D对象的方式 Graphics2D是是Graphics的的子子类类,它它们们都都是是抽抽象象类类,因因此此不不能能够够直直接接创创建建这这两两个个类类的的对对象象,它它们们的的创创建建过过程程完完全全由由相相应应的的组组件件控控制制。在在Swing组组件件中中,通通过过paintComponent()成成员员方方法法的的参参数获得绘图类对象。数获得绘图类对象。Graphics2D类中提供的成员方法ldraw(Shape shape)使使用用图图形形设设备备文文本本的的当当前前属属性性绘绘制制由由shape带带入的图形。入的图形。fill(Shape shape)使使用用图图形形设设
16、备备文文本本的的当当前前属属性性填填充充由由shape带带入的图形。入的图形。ldrawString(String text)使用图形设备文本的当前属性绘制文本。使用图形设备文本的当前属性绘制文本。ldrawImage()使用图形设备文本的当前属性显示图象。使用图形设备文本的当前属性显示图象。在包中定义了一系列实现在包中定义了一系列实现Shape接口的几何接口的几何图形类图形类 Line2Dl这这是是一一个个抽抽象象类类,定定义义了了由由两两个个端端点点确确定定的的直直线线。在在 这这 个个 类类 中中 包包 含含 了了 两两 个个 内内 部部 类类:Line2D.Float和和Line2D.
17、Double,它它们们分分别别实实现现用用float和和double类类型型的的用用户户坐坐标标定定义义直直线线端端点点的功能。的功能。Ellipse2Dl这这是是一一个个定定义义椭椭圆圆的的抽抽象象类类,其其中中包包含含了了两两个个内内部部类类:Ellipse2D.Float和和Ellipse2D.Double,它它们们分分别别实实现现用用float和和double类类型型的的数数值值描描述述用用户户坐坐标标点点的的功功能能。椭椭圆圆由由左左上上角角位位置置和和封封闭闭它的矩形宽度和高度确定。它的矩形宽度和高度确定。Graphics2D应用举例DrawTestDrawFrameDrawPan
18、elimport java.awt.*;import.*;import javax.swing.*;public class DrawTest public static void main(String args)DrawFrame frame=new DrawFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.show();import java.awt.*;import.*;import javax.swing.*;public class DrawFrame extends JFrame public D
19、rawFrame()setTitle(DrawTest);setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);DrawPanel panel=new DrawPanel();Container contentPane=getContentPane();contentPane.add(panel);public static final int DEFAULT_WIDTH=400;public static final int DEFAULT_HEIGHT=400;import java.awt.*;import.*;import javax.swing.*;public
20、 class DrawPanel extends JPanelpublic void paintComponent(Graphics g)Graphics2D g2=(Graphics2D)g;Rectangle2D rect=new Rectangle2D.Double(100,100,200,150);g2.draw(rect);Ellipse2D ellipse=new Ellipse2D.Double();ellipse.setFrame(rect);g2.draw(ellipse);g2.draw(new Line2D.Double(100,100,300,250);double c
21、enterX=rect.getCenterX();double centerY=rect.getCenterY();double radius=150;Ellipse2D circle=new Ellipse2D.Double();circle.setFrameFromCenter(centerX,centerY,centerX+radius,centerY+radius);g2.draw(circle);3、颜色类 Java主要使用主要使用RGB模式描述颜色特模式描述颜色特性。性。R、G、B各用一个字节表示,各用一个字节表示,取值范围为取值范围为0255。类库提供类库提供Color类描述颜色
22、。类描述颜色。Color类提供的静态常量 Color.red颜色名大写小写颜色名大写小写黑色BLACKblack紫色MAGENTAmagenta蓝色BLUEblue橙色ORANGEorange青色CYANcyan粉红PINKpink深灰DARK_GRAYdarkGray红REGred灰色GRAYgray白WHITEwhite绿色GREENgreen黄YELLOWyellow浅灰LIGHT_GRAYlightGrayColor类提供的成员方法Color(red,green,blue)public Color brighter()public Color darker()public int ge
23、tRed()public int getGreen()public int getBlue()设置颜色的成员方法l在Component类中,提供了设置组件前景颜色和背景颜色的成员方法:setForeground(Color color)setBackground(Color color)l在组件中绘图时,设置/获取绘图颜色的成员方法:setColor(Color color)getColor(Color color)import javax.swing.*;import.*;public class LineArtTest public static void main(String args
24、)JFrame frm=new JFrame(LineArt Demo);frm.getContentPane().add(new LineArtDemo();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setSize(300,200);frm.setVisible(true);设置绘图颜色设置绘图颜色public class LineArtDemo extends JPanel private int mNumberOfLines;private Color mColor;public LineArtDemo()this();
25、public LineArtDemo(String str)super();mNumberOfLines=25;mColor=new Color3;mColor0=new Color(255,0,0);mColor1=new Color(0,255,0);mColor2=new Color(0,0,255);public void paintComponent(Graphics g)Dimension d=getSize();super.paintComponent(g);Graphics2D g2=(Graphics2D)g;for(int i=0;imNumberOfLines;i+)do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 图形 用户界面
限制150内