您的位置:首页 > 编程语言 > Java开发

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

2017-10-12 21:31 495 查看
来源:http://blog.csdn.net/uoooo/article/details/6205056

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 图形的每个点通过它的x 和y 坐标决定。所有的draw 和fill 方法需要文本或图像是否被渲染的信息。

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

 
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 ,或者使用其他字体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: