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

创建Java2D图形

 
阅读更多

创建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再创建它们,这样图像将比原来大一倍。缩放多边形图像的速度比图像文件快,且得到的结果更好。

分享到:
评论

相关推荐

    JAVA 2D图形

    JAVA小程序 2D图形 创建2D图形 圆 检查半径是否为负数 包括junit测试

    Java动画、图形和极富客户端效果开发源代码 原书PDF+源码

    《Java动画、图形和极富客户端效果开发》讨论Java基本原理、Swing、Java 2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。《Java动画、图形和极富客户端效果开发》第...

    java动画、图形和极富客户端效果开发

    《Java动画、图形和极富客户端效果开发》讨论Java基本原理、Swing、Java2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。《Java动画、图形和极富客户端效果开发》第一...

    java动画、图形和极富客户端效果开发中文版

    本书讨论Java基本原理、Swing、Java 2D、图形、图形用户界面(GUl)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。本书第一部分讲述Java图形和用户界面编程的基本概念。第二部分讲述Java 2D和...

    java动画、图形和极富客户端效果开发 中文版

    《Java动画、图形和极富客户端效果开发》讨论Java基本原理、Swing、Java 2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。 本资源只有文档,不包含源代码。好书一本...

    java动画、图形和极富客户端效果开发.pdf

    本书是一本关于利用图形和动画效果创建更好、更有效和更酷的桌面应用程序的书。本书讨论Java基本原理、Swing、Java2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。

    Java2游戏编程.pdf

    本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题包括高速性能、双缓冲图像、动画、声音、媒体控制、I/O和网络支持等。将带领大家一步一步学习编写Java游戏,最终打造属于自己的Java游戏。 目录...

    JPlotter:使用AWT和LWJGL的基于OpenGL的Java 2D图形库

    JPlotter 通过使用AWT和Java OpenGL 2D库。 JPlotter的概念非常简单,您将获得由OpenGL支持的BlankCanvas 。 此画布显示的内容取决于设置的Renderer 。 您最有可能想要设置一个显示坐标系的CoordSysRenderer 。 在该...

    Japa:只是另一个处理API-受处理启发的Java 2D图形库

    受处理启发的Java图形库概述可用的库:...目标创建一个提供类似处理API的Java图形库,从而使创建图形图像变得简单而直观。观察结果抗锯齿是一种形状属性,因为在一张画布上可以有平滑和非平滑的形状。 零笔划宽度:在Ja

    使用Java开发城镇园林绿化方案设计过程代码.docx

    对于场地设计,可以使用Java图形界面工具,如JavaFX或Swing,创建一个可视化的场地图形界面。可以使用鼠标和键盘来添加和删除元素,如建筑物、道路和草坪。可以使用Java 2D绘图API来绘制场地元素。可以使用Java数据...

    JAVA_API1.8中文文档(CHM版).rar

    java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是...

    skin-composer, 使用图形界面创建 LibGDX scene2d.ui的外观.zip

    skin-composer, 使用图形界面创建 LibGDX scene2d.ui的外观 自述文件这个项目是用Java编程的,依赖于LibGDX和LWJGL3后端。外观编辑器使用外观编辑器为 scene2d.ui 创建外观版本 19更改固定区域错误导致FreeType...

    基于java语言开发的图形设计、图像绘制信息管理系统的毕业设计实现.zip

    这个系统的主要目标是为用户提供一个全面的图形设计和图像绘制工具,帮助用户轻松创建和编辑各种类型的图形和图像,包括矢量图形、栅格图像、图表和绘图等。为了实现这一目标,我采用了 Java 技术栈中的多种工具,...

    JavaAPI中文chm文档 part2

    java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是...

    JAVA_API1.6文档(中文)

    java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是...

    JAVA编写的绘图程序(内附源码)

    用JAVA编写的绘图程序,使用JAVA 2D API 提供源代码下载 JDK版本 1.4.x 功能简介: 支持存储,格式为XML,并支持颜色信息的存取,有导出为图片功能 支持多个组件选择:CTRL选择(或取消)和拉框...

    Java Platform Standard Edition 6 API规范.rar

    java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop...

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

    摘要:Java源码,图形操作,火焰效果  Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片...

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

    摘要:Java源码,图形操作,火焰效果  Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片...

    OPhone平台2D游戏引擎实现——物理引擎

    调试时所使用的颜色(Color3f.java),以及其他的一些数学相关的内容,因为我们说了Box2d他主要不是来做渲染的,但是有时候我们需要知道所设置的这些物体是否正确,进行调试,就需要绘制这些简单的图形,并显示出来...

Global site tag (gtag.js) - Google Analytics