Java标准教程:Java 2D绘图--第2章 从绘图开始

Java 2D API 是强大并且复杂的。然而,大多数Java 2D API 只用到了封装在java.awt.Graphic 类中的功能的自己。本节描述了应用程序开发者最普遍的需要。其他在后续的高级主题中描述。

大多数Graphics 类可以分成以下的基本部分:

l         绘制和填充方法,可以让您渲染基本的形状,文本,图像

l         属性设置方法,影响如何绘制和填充。

setFont setColor 这种方法定义了如何填充方法渲染。

下图展示了这些方法如何与graphic 对象关联:

 

 

 

绘图方法包括:

l         drawString :绘制文本
g.drawString("Hello", 10, 10);

l         drawImage :绘制图像

 

g.drawImage(img,

                    0, 0, width, height,

                    0, 0, imageWidth, imageHeight,

                    null);     

 

l         drawLine, drawArc, drawRect, drawOval, drawPolygon :绘制几何图形:

 

g2.draw(new Line2D.Double(0, 0, 30, 40));

 

根据您的需求,您可以选择Graphics 类中的一些方法,基于下列条件:

l         您是否想在指定的位置使用图像原来的大小或规模填充给定的矩形。

l         您是否想填充图像的透明区域或保持他们透明。

Fill 方法作用于集合形状,包括fillArc, fillRect, fillOval, fillPolygon

当绘制文本或图像的线时,记住2D 图形的每个点通过它的xy 坐标决定。所有的drawfill 方法需要文本或图像是否被渲染的信息。

例如,要画一条线,应用程序调用下列方法:

 

java.awt.Graphics.drawLine(int x1, int y1, int x2, int y2)

 

在代码中(x1, y1) 时线的开始点,(x2, y2) 时线的终点。

所以画水平线的代码如下:

 

Graphics.drawLine(20, 100, 120, 100);

 

下面的例子组合了所有提到的技术。移动滑块展示不同的天气类型。

 

 

 

WeatherWizard demo 使用JSlider 组件以及很多图像功能生成和展示特定的天气类型。关于JSlider 类的更多用法,请参考Swing 教程中的如何使用Sliders 一节。

WeatherPainter 类的paint 方法实现了图像特性。以下代码使用setupWeatherReport() 绘制图像。

 

        ...

        origComposite = g2.getComposite();

        if (alpha0 != null) g2.setComposite(alpha0);

        g2.drawImage(img0,

                0, 0, size.width, size.height,

                 0, 0, img0.getWidth(null), img0.getHeight(null),

                null);

        if (img1 != null) {

            if (alpha1 != null) g2.setComposite(alpha1);

            g2.drawImage(img1,

                    0, 0, size.width, size.height,

                     0, 0, img1.getWidth(null), img1.getHeight(null),

                    null);

        }

        ...

 

setFont drawString 方法渲染了温度和天气条件。

 

        ...

        // Freezing, Cold, Cool, Warm, Hot,

        // Blue, Green, Yellow, Orange, Red

        Font font = new Font("Serif", Font.PLAIN, 36);

        g.setFont(font);

       

        String tempString = feels + " " + temperature+"F";

        FontRenderContext frc = ((Graphics2D)g).getFontRenderContext();

        ...

        g.setColor(textColor);

         int xTextTemp = rX-(int)boundsTemp.getX();

        int yTextTemp = rY-(int)boundsTemp.getY();

        g.drawString(tempString, xTextTemp, yTextTemp);

       

        int xTextCond = rX-(int)boundsCond.getX();

        int yTextCond = rY-(int)boundsCond.getY() + (int)boundsTemp.getHeight();

        g.drawString(condStr, xTextCond, yTextCond);

 

fillRect 方法允许您使用指定颜色绘制矩形。

 

        ...

        Rectangle2D boundsTemp = font.getStringBounds(tempString, frc);

        Rectangle2D boundsCond = font.getStringBounds(condStr, frc);

        int wText = Math.max((int)boundsTemp.getWidth(), (int)boundsCond.getWidth());

        int hText = (int)boundsTemp.getHeight() + (int)boundsCond.getHeight();

        int rX = (size.width-wText)/2;

        int rY = (size.height-hText)/2;

       

        g.setColor(Color.LIGHT_GRAY);

        g2.fillRect(rX, rY, wText, hText);

    ...

 

您可以通过修改WeatherWizard demo 的方法改变图像内容。例如,使用fillRoundRect 取代fillRect ,或者使用其他字体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值