创建Java2D图形

摘要:
为了创建Java2D图形,我们将介绍如何将Swing容器变成一个艺术画布,在画布上可以绘制字体、颜色、形状和图形。接下来,创建一个字体Fei Xiang,并在绘制文本之前将其指定为当前字体:publicvoidpaintComponents{super.paintComponent;//若要更改生成的方法的主体,请选择Tools | Templates.Graphics2Dgraphics2DD=g;Fontfont=newFont;graphics2D.setFont;graphics2D.drawString;}Java支持抗锯齿,因此字体和图形可以绘制得更流畅,并且它们的外观具有更少的锯齿。

创建Java2D图形

下面我们将介绍如何将Swing容器(存放GUI组件的纯黑色面板和框架)变成一块可以在上面绘制字体、颜色、形状和图形的艺术画布。

1、使用Font类

在Java中,颜色和字体使用java.awt包中的Color和Font类来表示。字体使用构造函数Font(String , int , int)来创建,3个参数分别为:

>字体的名字,它可以使描述性名字,也可以是实际的字体名;

>Font.BOLD、Font.ITALIC和Font.PLAIN这3个类变量中的一个;

>字体大小,单位为磅

下面的语句创建了一个Font对象,字体为微软雅黑:

Font current = new Font(“微软雅黑” , Font.ITALIC , 12);

如果你使用了一个指定的字体而非通用字体,则改字体必须已经安装在运行程序的计算机中。你可以将字体样式合并起来使用,例如:

Font current = new Font(“微软雅黑” , Font.BOLD + Font.ITALIC , 72);

当有了字体之后,可以调用Graphics2D组件的setFont(Font)方法,讲其指定为当前字体。在没有指定新字体之前,后续所有的绘制操作都将使用该字体。下面创建了一个字体费翔,并在绘制文本之前将其指定为当前字体:

public void paintComponents(Graphics g) {
        super.paintComponents(g); //To changebody of generated methods, choose Tools | Templates.
        Graphics2D graphics2D = (Graphics2D)g;
        Font font = new Font("微软雅黑", Font.BOLD,15);
        graphics2D.setFont(font);
        graphics2D.drawString("小武灵灵", 5, 50);
    }

Java支持消除锯齿功能,因此可以更为平滑地绘制字体和图形,而且他们的外观具有较少的锯齿。为了启用这个功能,必须在Swing中设置渲染提示(rendering hint)。Graphics2D对象具有一个setRenderingHint(int , int)方法,他可以接受两个参数:

>渲染提示键(key);

>与该键相关联的值。

这些值是位于java.awt包中的RenderingHints类的类变量。要启用消除锯齿功能,可使用两个参数来调用setRenderingHint()方法:

graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

2、使用Color类

在Java中,颜色可使用Color类来表示,其中包括许多常量如black、red等。在容器中,可以调用setBackground(Color)方法来设置组件的背景色,其中上面提到的颜色常量作为该方法的参数,如下所示:

setBackground(Color.orange);

与当前的字体相同,使用setColor(Color)方法执行绘制任务之前必须先设置当前的颜色。下面的代码将颜色设置为red:

graphics2D.setColor(Color.red);

在使用setBackground()方法时,我们可以直接在容器上调用,但是setColor()则不行,我们必须在Graphics2D对象上调用该方法。

3、创建自定义颜色

在Java中,通过制定sRGB通用色彩标准的值,可以创建自定义颜色。sRGB使用颜色中的红、绿、蓝分量来定义颜色。每一种颜色的取值在0~255之间。构造函数Color(int , int , int)接受3个参数,分别表示红、绿、蓝的值。下面的代码将回执一个面板,该面板在暗红色(红:235;绿:50;蓝:50)背景中显示亮橙色(红:230;绿:220;蓝:0)文本:

Color lightOrange = new Color(230, 220, 0);
    Color darkRed = new Color(235, 50, 50);
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D graphics2D = (Graphics2D)g;
        graphics2D.setColor(darkRed);
        graphics2D.fillRect(0, 0, 200, 100);
        graphics2D.setColor(lightOrange);
        graphics2D.drawString("小武灵灵", 5, 50);
    }

该示例调用Graphics2D的fillRect()方法使用当前颜色绘制一个填充的矩形。

4、绘制直线和形状

在Java中,绘制直线和矩形这样的形状就想显示文本那样简单。只需要一个Graphics2D对象来定义绘制平面和表示要绘制内容的对象即可。

Graphics2D对象有用来绘制文本的方法,如下所示:

graphics2D.drawString(“小武灵灵” , 15 , 40);

这将在坐标点(15 , 40)位置绘制文本”小武灵灵”。绘制直线的方法所使用的坐标系与绘制文本的方法相同。通过使用下面的语句可以确定applet能够使用的最大(x , y)值:

Int maxXValue = getSize().width;

Int maxYValue = getSize().height;

除了可以绘制直线以外,你还可以绘制填充的形状或者是为填充的形状。

1)、绘制直线

Line2D.Float类能够创建一条连接起点(x1 , y1)和终点(x2, y2)的直线。

Line2D.Float line= new Line2D.Float(x1 , y1 , x2 , y2);

除了直线之外,调用Graphics2D类的方法还可以绘制其他形状:draw()方法可以绘制轮廓线,而fill()方法可以绘制填充形状。下面的语句与上面的对象想结合,可以绘制出直线对象:

Graphics2D.draw(line);

2)、绘制矩形

矩形可以使填充或非填充的,还可以是圆角或直角的。矩形可以使用构造函数Rectangle2D.Float(int , int , int , int)来创建,4个参数如下:

>矩形左上角的X坐标

>左上角的Y坐标

>矩形的宽度

>矩形的高度

下面的语句可以绘制一个非填充的直角矩形:

Rectangle2D.Float box = new Rectangle2D.Float(245F , 60F , 20F, 10F);

要绘制矩形的轮廓,可以使用下面的语句:

graphics2D.draw(box);

要填充该矩形,可以使用fill()方法:

Graphics2D.fill(box);

可以使用RoundRectangle2D.Float类来创建圆角矩形。这个类的构造函数前4个参数与Rectangle2D.Float类相同,并增加了下面两个参数:

>水平方向上距离矩形角的像素数;

>垂直方向上距离矩形角的像素数。

下面的语句创建一个圆角矩形:

RoundRectangle2D.Floatrr2d = new RoundRectangle2D.Float(10F , 10F , 100F , 80F , 15F , 15F);

最后两个参数指定在矩形的4个角上,在离角点15像素出开始倒圆角。

3)、绘制椭圆和圆

椭圆和圆使用同一个类——Ellipse2D.Float创建。这个类的构造函数接受4个参数:

>椭圆的X坐标

>椭圆的Y坐标

>椭圆的宽度

>椭圆的高度

(x, y)坐标、宽度、高度描述了椭圆的外接矩形,(x , y)是该矩形的左上角坐标。如果宽和高相同,则椭圆变成圆。下面的语句创建一个圆:

Ellipse2D.Float cir = new Ellipse2D.Float(245F , 45F , 5F , 5F);

4)、绘制弧线

在Java中可绘制的另一个圆形形状是弧线,它是椭圆或圆的一部分。弧线用Arc2D.Float类创建,这个类的构造函数使用几个与Ellipse2D.Float相同的参数。要创建弧线,需要制定一个椭圆、该椭圆的可见部分(单位为度)以及弧线的起点。

要创建弧线,向构造函数传递下述整型参数:

>椭圆外接矩形左上角的X坐标;

>该矩形左上角的坐标;

>该矩形的宽度;

>该矩形的高度;

>弧线的起点(0°~359°);

>弧线长度,单位为度;

>弧线类型。

弧线的起点为0~359°,方向为逆时针方向,其中0°对应于3点钟的位置。

弧线的类型用Arc2D.Float类的3个类变量之中的一个指定:PIE将弧线绘制为饼图的一部分;CLOSED将弧线的起点和终点用直线相连;OPEN不将终点和起点相连。

下面的语句创建一个非闭合弧线,其外接矩形的左上角坐标为(100 , 50),高度和宽度值都是75,弧线从30°处开始,长120°:

Arc2D.Floatsmile = new Arc2D.Float(100F , 50F , 65F , 75F , 30F , 120F , Arc2D.Float.OPEN);

总结

尽管使用Java中的形状在尽兴绘制时,看起来相当麻烦,而且不是那么值得,但是,与从图像文件中载入的图形相比,使用多边形描绘的图形具有两个优势:

>速度:即使是加载和显示小图形,所需的时间也比交在和显示一系列多边形长;

>缩放:对于由多边形组成的图像,只需修改用于创建多边形的值就能改变整个图像的大小。例如可以在Sign类中添加一个函数,将每个形状的(x, y)点乘以2再创建它们,这样图像将比原来大一倍。缩放多边形图像的速度比图像文件快,且得到的结果更好。

免责声明:文章转载自《创建Java2D图形》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JSON必知必会【PDF+视频教程】阿里巴巴编码规范-考试认证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java在图片上添加文字

业务需求要在图片上添加水印。下面粘出代码供自己和大家分享 packagecom.pro.drawTextOnImg; importjava.awt.Color; importjava.awt.Font; importjava.awt.FontMetrics; importjava.awt.Graphics2D; importjava.awt.Im...

Labview 中的类

一、创建一个空的类     在 LabVIEW 工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类。类的结构和 LabVIEW 工程库是比较相近的:类的名字也作为名字空间;也可以为类中的 VI 设置访问权限等。类在硬盘上被保存在一个 .lvclass 文件中。这个文件其实是一个XML格式的文本文件,它的格式与 .lvlib 类似。    类是一个抽象的定义...

delphi的构造函数和析构函数

delphi的构造函数的定义是:constructor create;delphi的析构函数的定义是:destructor destroy;析构函数是不能重载的,但是构造函数是可以重载的。构造函数在重载的时候要在后面加“overload”,例如:constructor create;overload;constructor create(i:integer...

日常编码规范(Java版)

规范: 命名: 接口命名。接口必须是名词,并且接口是能准确的描述要做的事情,命名能清晰的看出输入输出,可以是抽象的行为描述。接口必须以一个动作的名词形式结尾,比如reader,handler等。接口的命名,必须是抽象的,除非接口本身和具体实现紧密相关,否则不应该在接口中包含任何和具体实现相关的名词。接口命名根据行为分为以下几种: 读取某个数据,命名: {...

rem怎么计算

px:相对长度单位。像素px是相对于显示器屏幕分辨率而言的 em:相对单位,继承父节点(层层继承,传递)基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值。 rem:相对单位,相对长度单位。r’是“root”的缩写,相对于根元素<html>的字体大小, 可理解为”...

前端经典面试题解密:JS的new关键字都干了什么?

前言 new关键字在实例化获取对象时都做了什么?是一道经常出现在前端面试时的问题。如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的。更深入的层级发生了什么呢?同时面试官想从这道题里面考察什么呢?下面胡哥为各位小伙伴一一来解密。 一、new关键字 new关键字的作用:通过new关键字实例化构造函数,获取对象。说一千道一万,不如来段代码看...