当前位置:  技术问答>java相关

java1.2以上版本中是否有功能强大的柱形图,饼图,线形图生成组件?高分相赠!

    来源: 互联网  发布时间:2015-09-27

    本文导语:  如有:在什么包内?主要实现类有哪几个?是否还需要自己扩展? 如没有,有没有朋友做过?提供一点参考经验,谢谢! | 俺来给你做一个吧! | 油箱 俺给你发一个 柱形 ...

如有:在什么包内?主要实现类有哪几个?是否还需要自己扩展?
如没有,有没有朋友做过?提供一点参考经验,谢谢!

|
俺来给你做一个吧!

|
油箱 俺给你发一个 柱形 数据从网页中读取

|
一、简介 

Java 2D API是JFC (Java Fundation Classes)的一员,加强了传统AWT( Abstract Windowing Toolkit )的描绘功能。在 JDK1.2中已经支援 Java 2D 的使用。透过Java 2D API ,Programmer 可以轻松地描绘出任意的几何图形、运用不同的填色效果、对图形做旋转( rotate)、缩放( scale)、扭曲( shear)等。如图一所示,Programmer 透过2D API所提供的功能,简单地利用不同类型的线或是填色效果绘出统计图,以区分出不同的资料。当然, 2D API还有许多增强AWT能力的部分,像是处理影像档案可以有不同的滤镜(filter)效果、对於任意的几何图形亦能做碰撞侦测(hit detection)、图形重叠混色计算(composite)等功能。文中将会对这些技术做概略性地介绍。 

  
图一、多种2D的图形表示法 [1]  
二、Java 2D API Packages 

JDK1.2中关於2D API的Packages如下所述: 

2.1 java.awt

java.awt包含了一些新增的2D API 类别(classes)和介面(interfaces )。其中 Graphics2D继承自 java.awt.Graphics ,是描绘2D图形的物件(object)。如同前版本的JDK所使用的绘图模式一样,当有物件 要被描绘时,paint或是update method会自动根据适当的 Graphics Context 来做绘图的工作。所谓的Graphics Context是与 Graphics Object相关状态属性(state attribute)的集合。在Graphics2D中新增了许多状态属性,像是Stroke、 Paint、Clip、 Transform等。

2.2 java.awt.geom 

java.awt.geom 则包含可以勾勒任何形状的 GeneralPath类别。它可以由许多不同种类的subpath构成,像是lines和 quadratic curves 等。为了兼顾方便性,此package中更定义了许多基本几何图形,包括Arc2D 、CubicCurve2D、 Line2D等。这些类别都有两种型态,分别是Float precision与Double precision。此外,还有一种特别的图形类别:Area,它支援Constructive Area Geometry( CGA)。CGA是对既有图形物件做布林运算(Boolean Operation)而产生新图形物件的过程。如图二所示, Areas支援联集( union)、交集( intersection)、差集(subtraction )、Exclusive OR (XOR)等布林运算。最後, AffineTransform 类别则提供图形物件做Scale、Shear 、Rotate等座标上的转换。

  
图二、 Boolean Operation[2]  

2.3 java.awt.font 

java.awt.font 中定义了 TextLayout类别,负责建构text shape、执行适当的 text operations,如碰撞侦测与打光 (highlighting)等,以及决定text的适当位置与顺序。 

2.4 java.awt.image

Java 2D API支援三种影像模式。包括 producer/consumer (push) model、 immediatemode model和 pipeine(pull) model。Push model 在前版本的JDK中支援。而Pull model 则在即将出现的 Java Advanced Imaging AP中会支援。於此,我们只探讨JDK1.2中出现的Immediate mode imaging model。在此model下, Programmer可以透过2D API对image data( BufferedImage or Raster)做滤镜的效果。在Package java.awt.image中,immediate mode imaging APIs 可以被归为六大类: interfaces、image data classes、 image operation classes、sample model classes、 color model classes和 exceptions。其中 operation classes 即定义了许多 filter ,包括了 AffinTransformOp 、BandCombineOp、 ColorConvertOp、 ConvolveOp、 LookupOp、 RescaleOp等。透过以上所提之滤镜,可以做到 geometrically transform、blur、 sharpen、enhance contrast、 threshold和color correct images等效果。如图三所示,source image经过filter,产生出新的图形。

  
图三、 Image Processing Model [3]  

2.5 java.awt.color

Package java.awt.color定义了class ColorSpace。此 class提供 Programmer转换色盘的method。 

2.6 java.awt.print

Java Printing API提供Programmer 列印AWT和Java 2D graphics(composit ed graphics和 images)的method。并可让User设定 print的属性,如双面列印等。

三、Java 2D Programming初步 

 解了Java 2D API 各相关的package资讯之後,可以进一步地实做一些简单的Applications来体认2D的美妙。在那之前,我们先学习一些基本的2D programming codes 。 

3.1基本步骤 

绘图的第一个步骤是产生 Graphics2D Object 。 接著是设定你所 要的状态属性。例如你想要对一物件做渐层式的填色,可以设定属性 Paint为 GradientPaint。最後再呼叫 Graphics2D所提供的redering method ,fill或是draw,完成整个绘图的程序。以下即是此基本步骤的范例程式码:

import java.awt.*;

import java.awt.geom.*;

public void paint(Graphics g)
{
  Ellipse2D.Float shape;
  GradientPaint gp;
  // create a Graphics2D

  Graphics2D g2 = (Graphics2D) g ;

  // create a Ellipse2D (x,y,w,h)

  shape = new Ellipse2D.Float (200,200,60,60);

  // create a Cyclic GradientPaint 

  // (x1,y1,color1,x2,y2,color2, boolean cyclic)

  gp = new GradientPaint (180,190,Color.yellow,220,210,Color.red,true);

  g2.setPaint(gp);

  g2.fill(shape);

}


 



3.2 如何画线

在jdk尚未支援 2D图形之前, Programmer只可以画出直的、相同粗细的线条。现在,我们就教您如何透过2D API绘出不同粗细的线条及圆滑的曲线。在package java.awt.geom中提供了Line2D、 QuadCurve2D及 CubicCurve2D等 classes,让 Programmer轻松地绘出想要的线条。范例程式码如下所示:

import java.awt.geom.*;

Line2D.Float line;

CubicCurve2D.Float cubic;

// create a Line2D

line = new Line2D.Float(20,390,200,390);

// create a CubicCurve2D,比直线多了两个控制点

cubic = new CubicCurve2D.Float(70,100,120,50,170,270,220,100);

// 设定描绘的粗细

g2. setStroke(new BasicStroke(2.0f));

g2.setColor(Color.blue);

g2.draw(line);

line = new Line2D.Float(30,400,250,400);

// 设定描绘的粗细

g2. setStroke(new BasicStroke(5.0f));

g2.draw(line);


 



3.3显示字串 

透过Java 2D, Programmer可以显示更细致的文字。如范例程式码的效果:显示出外边为淡蓝色的字串 " Font Test "。

import java.awt.font.*;


Shape sha;

FontRenderContext frc =g2.getFontRenderContext();

TextLayout tl = new TextLayout("Font Test",new Font("Modern",
                                     Font.BOLD+Font.ITALIC,20),frc);

sha=tl.getOutline(AffineTransform.getTranslateInstance(50,380));

g2.setColor(Color.blue);

g2.setStroke(new BasicStroke(2.0f));

g2.draw(sha);

g2.setColor(Color.white);

g2.fill(sha);


 



3.4图档处理 

之前,若希望图形有滤镜的效果,必须透过可以处理图形的绘图软体来帮忙。在2D API中则提供了一些简单的method,使得 Programmer可以直接用程式码来对图形作滤镜效果的控制。下面即介绍其中一种效果。范例程式码如下所示: 

float[] elements = {0.0f, -1.0f, 0.0f,-1.0f, 4.f, -1.0f,0.0f, -1.0f, 0.0f};

Image img = Toolkit.getDefaultToolkit().getImage("boat.gif");

int w = img.getWidth(this);
int h = img.getHeight(this);

BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

Graphics2D big = bi.createGraphics();

big.drawImage(img,0,0,this);

BufferedImageOp biop = null;

AffineTransform at = new AffineTransform();

BufferedImage bimg = new BufferedImage(img.getWidth(this),img.getHeight(this),
                       BufferedImage.TYPE_INT_RGB);

Kernel kernel = new Kernel(3,3,elements);

ConvolveOp cop = new ConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);

cop.filter(bi,bimg);

biop = newAffineTransformOp(at,AffineTransformOp.TYPE_NEAREST_NEIGHBOR);

g2 = (Graphics2D)this.getGraphics();

g2.drawImage(bimg,biop,0,0);


 



上面的范例程式码造成图四到图五的变化。 

 

|
http://java.sun.com/products/java-media/2D/

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求购Java1.3API手册
  • 求助!Java1.3文档!!!
  • 请问java2与java1.1差别大不大
  • 请问哪里下载sun公司的java1.0和1.1
  • 请问:谁有中文的java1.3类库参考书???????????????
  • 请问,Juilder中采用的是java2还是java1.x?
  • 怎样学java1
  • 谁有Java1.4的帮助文件(.hlp格式)?
  • 看完了core java1和thinking in java,看什么?
  • 那一位大侠能告诉我那里有下的java1.4的api
  • 刚开始学,问个很菜的问题.装了JAVA1.2.2需要做什么样的设置.
  • 我下载了java1.4,却没有javac,why???
  • 主  题: win2000server装了JAVA1.2.1后,老是提示,在使用中插拔了硬件,蓝屏死机
  • 请问java1.2和java2在语法方面有什么主要不同?
  • 请问 HttpServletRequest是java1.4中的类吗?
  • java1.5中访问环境变量


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3