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

     

     

     

     

  • 相关阅读:
    PDF格式简单分析
    python 2.x 版本 pip 的使用
    网络读书笔记-运输层
    网络读书笔记-应用层
    线程池源码解析
    管道流创建订单
    @autowire、@resource原理
    Spring如何解决循环依赖
    结合Spring特性实现策略模式
    自定义注解+AOP实现redis分布式锁
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2981405.html
Copyright © 2020-2023  润新知