`
guanhuaing
  • 浏览: 1199856 次
文章分类
社区版块
存档分类
最新评论

JAVA 绘图类—Graphics

 
阅读更多

Java提供的Graphics类是用于绘图和显示格式化文字的工具。绘图必须在一个窗口(容器)中进行,Java小程序Applet就是一个窗口。本章我们只介绍Graphics类的绘制基本图形和格式化文字显示这两部分功能,其余内容在以后需要的时候再研究。

1 在Applet中写字和画图

要创建一个Applet,必须让自己的类从java.allpet.Applet类继承即可。Applet类是一个抽象类,它提供了五个抽象方法,它们是:

  • init( )applet初始化,在applet首次创建时执行。
  • start()applet开始正常运作。在每次applet画面在浏览器窗口中可见时调用,也在init()后调用。
  • stop( )停止运作。每当applet画面移出浏览器窗口的可见区域时调用,也是destroy( )前被调用。
  • paint()在applet窗口中或画布上写字画图。也在update()方法中被自动调用。
  • destroy()废弃当前applet的实例。在applet从网页上重新装载时调用。

Graphics类在java.awt包中被声明。AWT(Abstract Windows Toolskit)的名称是抽象窗口工具包,是提供窗口及其组件的类库。写字和画图是用Graphics的drawXXX方法实现的。如drawString(String),drawLine(.)等。画图用的坐标系是原点在左上角,纵轴向下以象素为单位的坐标系。

下面我们给出一个简单的示例说明在Applet中写字和画图的基本方法。

例1 Applet中写字和画图的基本方法。

///
importjava.awt.*;
importjava.applet.*;
publicclassDrawBasicextendsApplet {
publicvoidpaint(Graphics g) {
g.drawString("用Graphics写字和画图的基本方法", 20,40);
g.drawOval(100, 100, 30, 30);
g.drawOval(200, 100, 40, 25);
g.drawLine(20, 140, 200,140);
g.drawRect(20, 160, 50, 80);
g.drawRoundRect(110, 160, 100, 100, 25, 18);
}
}
///

在窗口显示文字用 g.drawString(String, intX, intY)。intX,intY是开始显示的位置。画椭圆用g.drawOval(中心坐标,长轴,短轴),画直线用g.drawLine(起点,终点),画矩形用g.drawRect(左上角坐标,X边长,Y边长)。drawRoundRect是圆角矩形,比矩形对两个参数表示圆角的大小。

2 设置颜色和字体

例1中的文字使用默认的字体和大小和默认的黑色,不免单调。使用不同的字体字号和选择不同的颜色是美化网页必不可少的。
设置背景色的是方法继承自Applet的,语法为:
setBackground(new Color(int,int,int))
即它的参数是一个Color对象句柄。
设置前景色的方法是属于Graphics的,即设置Graphics的绘图色。语法为:
g.setColor(Color对象);
选择颜色有两种方法,一是直接用颜色值RGB创建Color对象,如:
Color color = new Color(R,G,B)
另一种是用颜色常量如Color.red, Color.green等。Color类提供了13种颜色常量,由其格式可知它们都是静态的终极的。

设置字体需要使用java.awt.Font类创建一个Font对象。Font的常用构建器形如:
Font(字体名或逻辑字体名,字型,字号)
字体名是运行程序的操作系统适用的字体,字型为Font类声明了的静态常量,有下列4种:
Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD|ITALIC
分别表示正常、粗体、斜体和粗斜体。下面的例程演示设置颜色和字体的方法。

例2 本例程演示设置颜色和字体。

///
importjava.awt.*;
importjava.applet.*;
publicclassFontDemoextendsApplet {
publicvoidpaint (Graphics g){
String s1 ="This Font is ";
Font font =newFont("Arial", Font.BOLD, 18);
g.setColor(Color.red);
setBackground(newColor(0,255,0));
g.setFont(font);
g.drawString(s1 + font.getName() ,20, 60);
g.setFont(newFont("隶书", Font.BOLD, 28));
g.drawString("现在是隶书",20, 120);
g.setColor(newColor(0,0,0));
}
}
///

运行后在网页上显示如下(位置不算):

This Font is Arial

现在是隶书

创建了字体对象font后,只要简单地用g.setFont(font)设置使用新字体。直到再次使用setFont前都有限。在实际应用时最好先保存原有的颜色和字体设置,在使用完了后再恢复。

drawString方法只使用起点的坐标。下一行显示在什么位置很难精确定位。要想精确定位,我们需要知道字符串显示的长度(象素)以控制水平方向的尺寸,知道字体的高度以控制垂直方向的尺寸。Java另外提供了FontMetrics类来解决排版问题。这里介绍它的两种方法就可以满足我们的简单需要。用Graphics的getFontMetrics方法创建一个FontMetrics对象,它的getHeight()方法可得到字高,stringWidth(String)方法得到字符串占用的宽度。
FontMetrics fm = g.getFontMetrics(font); // 创建一个FontMetrics对象
int height = fm.getHeight();
int width = fm.stringWidth(s1);

例3 FontMetrics对象的简单用法。

///
importjava.awt.*;
importjava.applet.*;
publicclassFontMetricsDemoextendsApplet {
publicvoidpaint (Graphics g){
String s1 ="Hello, Java World!";
g.setColor(Color.red);
setBackground(newColor(0,255,0));
Font font =newFont("Arial", Font.BOLD, 18);
g.setFont(font);
FontMetrics fm = g.getFontMetrics(font);
intheight = fm.getHeight();
intwidth = fm.stringWidth(s1);
intposx =50;intposy = 50;
g.drawString(s1 ,posx, posy);
g.drawString("I will come in.",posx +width, posy+height);
}
}
///

运行后在网页上显示大致如下:

Hello, Java World!

I will come in.

Java有一个类叫GraphicsEnvironment提供绘图环境,它有一个方法叫getAvailableFontFamilyNames(),由它可以得到程序所在机器操作系统的所有字体名(是String不是Font)。下面的程序在网页上显示所有可用的字体名称和实际形状。由于字体种类很多,一屏幕放不下,只在设定的Applat的界限内显示。除非给窗口添加垂直滚动条,这在下一章中介绍。

例4 显示您的操作系统所有可有的字体名称。

///
importjava.awt.*;
importjava.applet.*;
publicclassFontAllextendsApplet{
publicvoidpaint(Graphics g) {
GraphicsEnvironment gv =
GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] ftNames = gv.getAvailableFontFamilyNames();
for(inti=0; i<ftNames.length; i++) {
Font ft =newFont(ftNames[i], Font.BOLD, 14);
g.setPaintMode();
g.setFont(ft);
g.drawString(ftNames[i], 5, 15 * (i+1));
g.drawString("Hello the world!", 200, 15 * (i+1));
}
}
}
///

3 基本图形的绘制

这一节介绍Graphics拥有的绘图方法,除了矩形和卵形以外,还有多角形、填充图形和三维矩形等。所有方法都是void类型的。

drawLine(int,int,int,int)画直线。起点坐标,终点坐标
drawRect(int,int,int,int)画矩形。左角坐标,宽,高
drawRoundRect(int,int,int,int,int,int)画圆角矩形。左角坐标,X宽,Y高,深度X,深度Y
draw3DRect(int,int,int,int,boolean) 画3D矩形。左角坐标,宽X,高Y,ture
drawOval(int,int,int,int) 画卵形。中心坐标,长轴,短轴
drawArc(int,int,int,int,int,int)画弧。左角坐标,宽,高,起始角,终止角
drawPolyline(int[],int[],int) 画折线。各点的X坐标,Y坐标,折线数
drawPolygon(int[],int[],int)画多角形。各点的X坐标,Y坐标,边数
drawPolygon(Polygon)画多角形。定义好的多角形对象

画填充图形只有把以上九种方法中的draw改为fill即可,参数表是一样的,颜色就是g.setColor()设定的。注意fillRect()可以用来画一根粗实线。下面的例题我们分别画弧、多角形和三维矩形。

例5画弧和多角形。

///
importjava.awt.*;
importjava.applet.*;
publicclassGraphArcPolygonextendsApplet {
publicvoidpaint(Graphics g) {
//定义待画组合图形的中心
Point p =newPoint(cx / 2, cy / 2);
//定义待画矩形的轮廓
Rectangle rect =newRectangle((p.x - 40), (p.y - 40), 80, 40);//定义多边形的顶点
int[] xP = {(p.x - 40), (p.x + 90), p.x+200, (p.x - 40)};
int[] yP = {(p.y - 40), (p.y +140), (p.y + 60), (p.y-40)};
g.drawArc(rect.x, rect.y, rect.width, rect.height * 2, 270, 90);
g.drawPolygon(xP, yP,3);
g.setColor(Color.red);
}

publicvoidinit() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
cx = d.width/2 ;cy = d.height/2;
}
privateintcx;
privateintcy;
}
///

例6 画填充图形3D矩形等。

///
importjava.awt.*;
importjava.applet.*;
publicclassGraph3DRectextendsApplet {
publicvoidpaint(Graphics g) {
g.setColor(Color.green);
g.fillArc(10, 10, 60, 40, 30, 60);
g.fillOval(10, 60, 60, 40);
g.fillRect(80, 10, 60, 40);
Polygon p =newPolygon();
p.addPoint(150, 10);
p.addPoint(210, 10);
p.addPoint(210, 50);
p.addPoint(150, 50);
g.fillPolygon(p);//绘制高度为5个像素,视角为45度正方向的3维矩形
g.fill3DRect(150, 10, 60, 40,true);
for(inti=1; i<=5; i++)
g.draw3DRect(150 + i, 10 - i, 60, 40,true);
//绘制高度为5个像素,视角为135度正方向的3维矩形
g.fill3DRect(150, 60, 60, 40,true);
for(inti=1; i<=5; i++)
g.draw3DRect(150 - i, 60 + i, 60, 40,true);
}
}

分享到:
评论

相关推荐

    Java中Graphics2D类的绘图属性.pdf

    Java中Graphics2D类的绘图属性.pdf 学习资料 复习资料 教学资源

    使用Java的Graphics类进行绘图的方法详解

    主要介绍了使用Java的Graphics类进行绘图的方法,是Java的GUI编程的基础,需要的朋友可以参考下

    java绘图 显示各种字体 实例代码

    java绘图 显示各种字体 实例代码java绘图 显示各种字体 实例代码

    Java 2D高级绘图

    关于JAVA 2D的很多绘图方面的知识,有详细的程序示例,讲的很清楚,看后受益匪浅

    sucessTask:java运用Graphics类来绘图和显示格式化文字

    sucessTask java运用Graphics类来绘图和显示格式化文字。 通过maven来构建。maven版本——3.3.9 运用到的jar包:commons-lang3,com.google.zxing 一个简单的java_Demo.希望能对大家有用。

    Graphics Programming

    掌握java绘图程序设计相关类的用法以及掌握java绘图程序设计相关类的用法

    Java 通过Canvas实现绘图功能.rar

    可以画出直线、矩形、圆角矩形、三角形、文字等,把缓冲区图像的内容绘制到画布上,重载抽象类MIDlet的抽象方法startApp(),重载抽象类MIDlet的方法destroyApp(),Java Canvas绘图程序,新手必看代码。

    java绘图.代码

    绘制JAVA图形,易懂可观,柱形图饼图等

    Java绘图:绘制虚线与实线.rar

    Java绘图:绘制虚线与实线  public LineDemo(){   super("实线与虚线"); //调用父类构造函数   setSize(300,200); //设置窗口尺寸   setVisible(true); //设置窗口可视   setDefaultCloseOperation...

    java绘制印章图片(圆形)

    使用jdk的绘图工具来绘制印章,该代码中只绘制了圆形印章,印章中的内容包括公司名称、中间的五角星以及印章的类型

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java实现经典小游戏合集

    贪吃蛇 俄罗斯方块 扫雷 双缓冲绘图 java2d Graphics2D绘图 包含源代码、编译字节码、jar打包可直接运行(需要java虚拟机)

    Graphics写字符串

    自己写的一个Graphics写字符串的小程序,参考参考。

    Java实现的贪吃蛇游戏代码

    学习Java图形界面编程:通过实现贪吃蛇游戏,大家可以学习Java中的Graphics类和相关的绘图方法,掌握如何在窗口中绘制图形和文字。 理解事件处理机制:代码中包含了键盘事件的处理,大家可以学习如何监听和响应...

    用java学画图,显示轨迹,实现双缓冲效果

    理解画图时,Graphics对象从哪里来的,画到什么地方去,如何实现画图时显示轨迹,代码简单,但搞懂简单的代码后,对其他的理解就非常方便,适合初学者.

    java 2D 绘图技术.doc

    由Sun公司与Adobe系统公司合作推出的Java 2D API,提供了一个功能强大而且非常...Java 2D API扩展了java.awt包中定义的Graphics类和Image类,提供了高性能的二维图形、图像和文字,同时又维持了对现有AWT应用的兼容。

    java创建一张图片Demo.rar

    java创建一张图片Demo,主要代码: int width = 200, height = 250; //创建图片对象 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); //基于图片对象打开...

    Canvas绘图程序Java源码分享源码学习a

    Canvas绘图程序Java源码分享源码学习a

Global site tag (gtag.js) - Google Analytics