Java程序设计 第13章 图形
学习目标 理解Java的坐标系 使用Graphics类中的方法画图 使用paintComponent方法在面板中绘制图形
Java坐标系 (0,0) y x (x,y) (x,y) (0,0) x y 传统坐标系 Java坐标系 组件内部以组件左上角为坐标原点。 组件外部以组件所在容器的左上角为坐标原点。
java.awt.Graphics 可以利用Graphics类中的方法绘制线段、矩形、椭圆、圆弧、多边形。 draw3DRect, drawArc, drawImage, drawLine, drawOval, drawPolygon, drawPolyline, drawRect, drawRoundRect, drawString fill3DRect, fillArc, fillOval, fillPolygon, fillRect, fillRoundRect get/setFont, get/setColor
使用Graphics对象 调用JComponent类的getGraphics()方法可以获取Graphics对象。 覆盖Jcomponent类的paintComponent方法。该方法在组件第一次显示或需要重绘时,由Java虚拟机自动调用。 protected void paintComponent(Graphics g) 通常在JPanel中进行绘图。 Example: TestGetGraphics.java, TestPaintComponent.java, TestPanelDrawing.java
绘制字符串 drawString (String str, int x, int y); (x,y)
绘制线段 drawLine(int x1, int y1, int x2, int y2); (x1,y1) (x2,y2)
绘制矩形 Example:DrawRectangles.java drawRect(int x, int y, int w, int h); fillRect(int x, int y, int w, int h); (x,y) (x,y) h h w w draw3DRect(int x, int y, int w, int h Boolean raise); fillRoundRect(int x, int y, int w, int h, int aw, int ah); (x,y) (x,y) ah/2 aw/2 h h w w Example:DrawRectangles.java
绘制圆形 drawOval(int x, int y, int w, int h); fillOval(int x, int y, int w, int h); (x,y) h w Example:DrawOvals.java
绘制圆弧 drawArc(int x, int y, int w, int h, int angle1, int angle2); fillArc(int x, int y, int w, int h, int angle1, int angle2); (x,y) angle2 angle1 h w Example:DrawArcs.java
绘制多边形 int[] x = {25, 216, 62, 121, 180}; int[] y = {80, 80, 191, 11, 191}; g.drawPolygon(x, y, x.length); g.drawPolyline(x, y, x.length); (x[3],y[3]) (x[3],y[3]) (x[0],y[0]) (x[1],y[1]) (x[0],y[0]) (x[1],y[1]) (x[2],y[2]) (x[4],y[4]) (x[2],y[2]) (x[4],y[4])
使用Polygon绘制多边形 Polygon polygon = new Polygon(); polygon.addPoint(25, 80); polygon.addPoint(216, 80); polygon.addPoint(62, 191); polygon.addPoint(121, 11); polygon.addPoint(180, 191); g.drawPolygon(polygon); Example:DrawPolygon.java
例 绘制时钟 编写程序,绘制时钟 x = cx + r * sin(θ) y = cy - r * con(θ) 12 (x,y) θ r 9 3 (cx,cy) 6 Example:DisplayClock.java, StillClock.java, MessagePanel.java
例 显示图像 实现一个可缩放显示图像的的组件,。 Example: DisplayImage.java, ImageViewer.java, SixFlags.java