Java图形程序设计.ppt
《Java图形程序设计.ppt》由会员分享,可在线阅读,更多相关《Java图形程序设计.ppt(77页珍藏版)》请在三一办公上搜索。
1、Java图形程序设计,伍淳华北京邮电大学计算机学院,学习内容,采用Swing编写窗口程序;如何在窗口中采用多种字体显示文本;如何显示图像;,Java,Swing概述,两种基本GUI程序设计类库AWT(Abstract Window Toolkit)抽象窗口工具箱-对等体方法 将处理用户界面元素的任务委派给每个目标平台的本地GUI工具箱,由本地GUI工具箱负责用户界面元素的创建和动作。“一次编写,随处使用”。“一次编写,到处调试”。,Java,Swing概述,两种基本GUI程序设计类库SWING-1996,Netscape创建了一种IFC(Internet Foundation Class)的G
2、UI库,它将菜单、按钮等用户界面元素绘制在空白窗口上,而对等体只需创建和绘制窗口。在所有平台上的外观和动作都一样。-Sun和Netscape合作完善了这种方式,创建了一个名为Swing的用户界面库。,Java,Swing概述,两种基本GUI程序设计类库SWING vs.AWT-SWING显示用户界面的元素的速度比AWT慢一些;-SWING拥有一个丰富、便捷的用户界面元素集合;-SWING对低层平台的依赖很少,因此与平台相关的bug很少;-SWING给予不同平台的用户一致的感观效果;,Java,Swing概述,两种基本GUI程序设计类库SWING vs.AWT-SWING显示用户界面的元素的速度
3、比AWT慢一些;-SWING拥有一个丰富、便捷的用户界面元素集合;-SWING对低层平台的依赖很少,因此与平台相关的bug很少;-SWING给予不同平台的用户一致的感观效果;SWING没有完全替代AWT,而是基于AWT架构之上,其提供了能力更加强大的用户界面组件,但还需要使用基本的AWT事件处理。,Java,GUI基本组成,Java的图形用户界面的最基本组成成分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。容器(Container)实际上是Component的子类,因此容器本
4、身也是一个组件,具有组件的所有性质,另外还具有容纳其他组件和容器的功能,Java,创建框架,框架(frame)顶层窗口被称为框架Swing用JFrame类来表示框架,该 类扩展于AWT的frame。JFrame是极少数几个不绘制在画布上的Swing组件之一。其修饰部件(按钮、标题栏、图标等)由用户的窗口系统绘制,而不是由Swing绘制。,Java,创建框架,JFrame java.long.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.Window|+-java.awt.Frame|+-javax.swing.JFram
5、e,Java,创建框架,import javax.swing.*;public class SimpleFrameTest public static void main(String args)SimpleFrame sFrame=new SimpleFrame();sFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);sFrame.setVisible(true);class SimpleFrame extends JFrame public SimpleFrame()setSize(DEFAULT_WIDTH,DEFAULT_HEIG
6、HT);public static int DEFAULT_WIDTH=300;public static int DEFAULT_HEIGHT=200;,Java,创建框架,框架(frame),Java,创建框架,框架(frame)默认情况下,框架的大小为0*0象素;默认情况下,用户关闭窗口只是将框架隐藏了起来,程序并没有终止;构造一个框架并不自动显示,框架起初并不可见;,Java,框架设置,设置合适的框架大小-获得用户系统的基于像素的屏幕分辩率信息,然后利用这些信息计算最佳的窗口大小。-获得用户系统的屏幕分辩率信息Toolkit tk=Toolkit.getDefaultToolkit()
7、;Dimension ds=tk.getScreenSize();int width=ds.width;int hight=ds.height;,Java,框架设置,例:将一个可关闭框架设置为:其大小是整个屏幕的二分之一;位于屏幕的中央。,Java,框架设置,void setLocation(x,y);将框架放置在左上角水平x像素,垂直y像素的位置;坐标(0,0)位于屏幕的左上角;void setTitle(String s);设置框架的标题;void setIconImage(Image c);设置框架的图标;,Java,框架设置,import java.awt.*;import java.
8、awt.event.*;import javax.swing.*;public class CenteredFrameTest public static void main(Stringargs)CenteredFrame cf=new CenteredFrame();cf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);cf.setVisible(true);,Java,框架设置,class CenteredFrame extends JFramepublic CenteredFrame()Toolkit tk=Toolkit.getDefau
9、ltToolkit();Dimension ds=tk.getScreenSize();int width=ds.width;int hight=ds.height;setSize(width/2,hight/2);setLocation(width/4,hight/4);Image img=tk.getImage(icon.gif);setIconImage(img);setTitle(Centered Frame);,Java,框架设置,Java,面板与信息显示,如何在框架中显示文本信息?可以直接在框架中绘制信息,但这不是一种良好的编程习惯;框架在JAVA中是一个容器,用来放置其它组件,如
10、:放置一个按钮、一个文本框等;通常在一个称为面板(panel)的组件上绘制信息,并将该面板添加到框架中;,Java,面板与信息显示,如何在框架中添加一个面板(panel)?,Java,面板与信息显示,Swing程序员关心的是内容窗格,可使用下面的代码将组件添加到内容窗格中:Container contentPane=frame.getContentPane();Component c=new;contentPane.add(c);在JDK 5.0后,可直接调用JFrame.add方法将组件添加到框架中,该方法实际上调用了内容窗格中的add方法 frame.add(c);将面板(panel)的添
11、加到框架中 frame.add(panel);,Java,面板与信息显示,JPanel类包含一个可以用于绘图的表面;本身也是一个容器;为了能够在面板上进行绘图,需要进行定义一个扩展于JPanel的类在这个类中,覆盖paintComponent方法,Java,面板与信息显示,paintComponent方法该方法定义在JComponent类中,这个类是所有非窗口Swing组件的超类;该方法有一个Graphics类型的参数,通过该对象,可以进行绘制图案、图像和文本;程序员不用手工调用paintComponent方法,当应用程序需要绘图时(如窗口第一次出现、窗口大小调整等),事件处理器就会通告组件,
12、使得paintComponent自动调用。,Java,面板与信息显示,绘制文本 通过Graphics类中的drawString方法可在面板上绘制文本 g.drawString(text,x,y);class NotHelloWorldPanel extends JPanelpublic void paintComponent(Graphics g)g.drawString(Not a HelloWorld Program,MESSAGE_X,MESSAGE_Y);public static final int MESSAGE_X=75;public static final int MESSA
13、GE_Y=100;,Java,面板与信息显示,绘制文本 NotHelloWorldPanel类扩展了JPanel类,在填充面板的背景颜色时,JPanel类有自己的处理方式,为了确保超类完成自己的工作,必须在绘制自己的内容之前调用super.paintComponent();class NotHelloWorldPanel extends JPanelpublic void paintComponent(Graphics g)super.paintComponent();.,Java,面板与信息显示,import java.awt.*;import javax.swing.*;public cl
14、ass NotHelloWorldFrameTest public static void main(String args)NotHelloWorldFrame f=new NotHelloWorldFrame();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);,Java,面板与信息显示,class NotHelloWorldFrame extends JFramepublic NotHelloWorldFrame()Toolkit tk=Toolkit.getDefaultToolkit();Dime
15、nsion dm=tk.getScreenSize();int width=dm.width;int height=dm.height;setSize(width/2,height/2);setLocation(width/4,height/4);Image icon=tk.getImage(icon.gif);setIconImage(icon);setTitle(Not Hello World Frame);add(new NotHelloWorldPanel();,Java,面板与信息显示,class NotHelloWorldPanel extends JPanelpublic voi
16、d paintComponent(Graphics g)super.paintComponent(g);g.drawString(Not a HelloWorld Program,MESSAGE_X,MESSAGE_Y);public static final int MESSAGE_X=75;public static final int MESSAGE_Y=100;,Java,面板与信息显示,Java,2D图形,图形绘制主要有两个类Graphics(JDK 1.0):绘制图形的能力有限;Graphics2D(JDK 1.2):Graphics 的子类,绘制图形的能力强大;如果使用的是支持J
17、ava 2D的版本,paintComponent方法可自动地获得一个Graphics2D类对象,只需进行一次类型转换 public void paintComponent(Graphics g)Graphics2D g2=(Graphics2D)g;,Java,2D图形,常用的几何图形类Line2DRectangle2DEllipse2D.这些几何图形类实现了Shape接口绘制图形首先创建一个实现了Shape接口的类对象;调用Graphics2D类中的draw方法;Rectangle2D rect=;g2.draw(rect);,Java,2D图形,Java2D图形类采用的是浮点坐标;每个图形
18、类有两个版本:一个是为节省空间设置的float类型的坐标;另一个是double类型的坐标;例:Rectangle2D类有两个子类 Rectangle2D.Float Rectangle2D.DoubleRectangle2D.Float fRect=new Rectangle2D.Float(10.0f,25.0f,22.5f,20.0f);Rectangle2D.Double dRect=new Rectangle2D.Double(10.0,25.0,22.5,20.0),Java,2D图形,Rectangle2D.Float和 Rectangle2D.Double均继承于Rectangl
19、e2D,并且子类只覆盖了Rectangle2D超类中的方法,故没有必要记住图形类型,可直接使用Rectangle2D变量保存矩形的引用:Rectangle2D fRect=new Rectangle2D.Float(10.0f,25.0f,22.5f,20.0f);Rectangle2D dRect=new Rectangle2D.Double(10.0,25.0,22.5,20.0);对Rectangle2D的论述适用于其它所有的2D图形类,如Point2D也有两个子类Point2D.Float和Point2D.Double,子类也仅实现了父类的方法,可直接使用父类变量保存子类对象的引用。,
20、Java,2D图形,常用2D图形类 abstract RectangularShape 几何框架类图形的父类;public double getWidth();public double getHeight();public double getCenterX();public double getCenterY();,Java,2D图形,常用2D图形类,Java,2D图形,常用2D图形类 Rectangle2D.Double Rectangle2D.Double(double x,double y,double w,double h)x,y-矩形左上角的坐标(x,y);w-矩形宽度 h-矩形
21、高度 Rectangle2D.Double()x=y=w=h=0,Java,2D图形,常用2D图形类 Rectangle2D.Double如果已知两个矩形的两个对角点,也可以依此构造一个矩形,假设此两点的坐标分别为p(px,py),q(qx,qy):Rectangle2D rect=new Rectangle2D.Double();rect.setFrameFromDiagonal(px,py,qx,qy);或 rect.setFrameFromDiagonal(p,q);(p,q是用Point2D对象表示的两个对角点)public void setFrameFromDiagonal(doub
22、le x1,double y1,double x2,double y2);public void setFrameFromDiagonal(Point2D p1,Point2D p2);,Java,2D图形,常用2D图形类 Ellipse2D.Double Ellipsee2D.Double(double x,double y,double w,double h)x,y-椭圆所在矩形外框左上角的坐标(x,y);w-椭圆所在矩形外框矩形宽度 h-椭圆所在矩形外框矩形高度 Ellipse2D.Double()椭圆所在矩形外框为x=y=w=h=0,Java,2D图形,常用2D图形类 Ellipse2
23、D.Double 通过椭圆中心点c(centerX,centerY)、宽和高来构造一个椭圆:Ellipse2D ellipse=new Ellipse2D.Double(certerX-width/2,centerY-height/2,width,height);通过椭圆中心点及外矩形框中四个顶点中的一个来构造椭圆:Ellipse2D ellipse=new Ellipse2D.Double();ellipse.setFrameFromCenter(centerX,centerY,concerX,concerY);通过外矩形框来构造一个椭圆:Ellipse2D ellipse=new Elli
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 图形 程序设计

链接地址:https://www.31ppt.com/p-2404660.html