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

     

     

     

     

  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2981405.html
Copyright © 2011-2022 走看看