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 ,或者使用其他字体。