`
ry.china
  • 浏览: 137039 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

通过java2dAPI绘制报表

    博客分类:
  • java
阅读更多

    /*
    *只画直线,矩形,椭圆,只能向右下角画
    *
    *PainterPanel extends JPanel implements MouseListener
    *addMouseListener(this);
    *
    *JToggleButton
    *
    *hxz*/ 
   import java.awt.*; 
   import java.awt.event.*; 
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Random;

   import javax.swing.*; 
import javax.swing.border.Border;
import javax.swing.event.*; 
   class MyPainterPanel extends JPanel implements MouseListener{
      
       Point[] point=new Point[2]; //记录鼠标拖动的起始点和终点
       int max_width = 0;
       int max_height = 0;
       Map<String,Integer> girl_data;
       Map<String,Integer> boy_data;
       Color girl_color;
       Color boy_color;
       String title;
      
       int title_height = 14;
       int[] title_padding = {10,0,10,0};
        
       public MyPainterPanel(){ 
           super(); //调用父类构造函数  
           this.setBackground(Color.white); //设置背景颜色 
            point[0]=new Point(0,0); //初始化变量 
            point[1]=new Point(300,300); 
           addMouseListener(this); //增加鼠标事件 
           this.max_width = 600;
           this.max_height = 500;
    } 
       public MyPainterPanel(int width, int height){
           super(); //调用父类构造函数  
           this.setBackground(Color.white); //设置背景颜色 
            point[0]=new Point(0,0); //初始化变量 
            point[1]=new Point(300,300); 
           addMouseListener(this); //增加鼠标事件 
           this.max_width = width;
           this.max_height = height;
           System.out.println(width+"="+height);
    } 
        
       public void mouseReleased(MouseEvent e){ //鼠标释放事件 
              point[1]=new Point(e.getX(),e.getY()); //设置终点位置 
              //repaint(); //重绘屏幕 
       } 
        
       public void mouseEntered(MouseEvent e){} 
       public void mouseExited(MouseEvent e){} 
       public void mouseClicked(MouseEvent e){} 
        
       public void mousePressed(MouseEvent e){ //鼠标按下时事件 
              point[0]=new Point(e.getX(),e.getY()); //设置起始点位置 
       } 
          
       public void paint(Graphics g){  
               super.paint(g); 
            Graphics2D g2d = (Graphics2D) g;
           this.max_width = this.getWidth();
           this.max_height = this.getHeight();
          
           
            //MyGraphicsData m = new MyGraphicsData((Graphics2D) g);
            //m.truemode(0, 0, 600, 500, 10.0, 10.0, 590.0,490.0);
            g2d.setFont(new Font("DialogInput", Font.BOLD, 12));
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//            g2d.drawLine(point[0].x,point[0].y,point[1].x,point[1].y); //绘线 
//            int width=point[1].x-point[0].x; 
//            int height=point[1].y-point[0].y; 
//            g2d.drawOval(point[0].x,point[0].y,width,height); //绘椭圆 
//            width=point[1].x-point[0].x; 
//            height=point[1].y-point[0].y; 
//            g2d.drawRect(point[0].x,point[0].y,width,height); //绘矩形 
//            g2d.drawLine(0,max_height-30,max_width,max_height-30);
//            g2d.drawLine(0,0,max_width,max_height);
            g2d.setColor (Color.GREEN);    
            Point p1 = new Point(0,max_height-30);
            Point p2 = new Point(max_width,max_height-30);
            g2d.drawLine(p1.x, p1.y, p2.x, p2.y);
            //g2d.drawString("我靠", 150, 150);
            g2d.setColor (Color.yellow);    
            //g2d.fillArc (5, 15, 50, 75, 25, 165);
            //g2d.fill3DRect(250, 250, 100, 100, true);
           

           //         设置渐进色
           GradientPaint gp = new GradientPaint(180, 190, Color.yellow, 220, 210,
           Color.red, true);
           g2d.setPaint(gp);
           g2d.setStroke(new BasicStroke(2.0f));   //设定粗细
          
           Line2D.Float line = new Line2D.Float(20, 300, 200, 300);      //直线
           g2d.draw(line);
          
          
           //         显示文字
           FontRenderContext frc = g2d.getFontRenderContext();
           TextLayout tl = new TextLayout("测试文字", new Font("Modern", Font.BOLD
           + Font.ITALIC, 20), frc);
           //线形
           Shape sha = tl.getOutline(AffineTransform.getTranslateInstance(50, 180));
           g2d.setColor(Color.blue);//颜色
           g2d.setStroke(new BasicStroke(2.0f));//粗细
           g2d.draw(sha);
           g2d.setColor(Color.white);
           g2d.fill(sha);
           
           g2d.setColor(Color.red);
           //旋转
            AffineTransform oldTransform = g2d.getTransform();

               //旋转
               AffineTransform tr = new AffineTransform();
               //使用一个translation变换为要旋转的文本设置空间
                 tr.setToTranslation(100.0 , 100.0);
                 g2d.transform(tr);
                 //创建一个旋转变换来旋转文本
                 tr.setToRotation(Math.PI / 2.0);
                 //在90度角的位置渲染四个字符串"Java"的复件
                 for ( int i = 0; i < 4; i++){
                     g2d.drawString("Java", 0.0f , 0.0f);
                     g2d.transform(tr);
                 }
            g2d.transform(AffineTransform.getRotateInstance(Math.PI * (0.50f)));
            g2d.draw(sha);
            g2d.drawString("12505555555555", 0 , 0);
           
            g2d.setTransform(oldTransform);
                 
           float[] elements = { 0.0f, -1.0f, 0.0f, -1.0f, 4.f, -1.0f, 0.0f, -1.0f,
                   0.0f };
           try{
               //加载图片
               Image img = Toolkit.getDefaultToolkit().getImage("");
               int w = img.getWidth(this);
               int h = img.getHeight(this);
               BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
           
                   //创建Graphics2D对象
               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 = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
           
                   //显示图像
               g2d.drawImage(bimg, biop, 0, 0);
           }catch(Exception e){
               System.out.println(e);
           }
           

            //add_backgroud_image(g2d);
           
            this.draw_coord(g2d);
           
            System.out.println(this.getWidth()+"   "+this.getHeight());
            //g.draw3DRect(50, 50, max_width, 5, false);
            g.setColor(Color.BLUE);
            g.fill3DRect(50, 50, max_width, 5, false);
           
       }
      
       public void draw_coord(Graphics2D g){
          
           g.setColor(Color.BLACK);
          
           //下面坐标
           g.drawLine(0,max_height-30,max_width,max_height-30);
           for(int i=0; i<=30; i++){
               Stroke dash = new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,
                       3.5f,new float[]{5,3},0f);
               g.setStroke(dash);
              
               if(i*(max_width/30)<(max_width/2-20) || i*(max_width/30)>(max_width/2+20))
                   g.drawLine(i*(max_width/30),0, i*(max_width/30), max_height-25);
              
               Stroke dash2 = new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
               g.setStroke(dash2);
              
               AffineTransform oldTransform = g.getTransform();

               //旋转
               AffineTransform tr = new AffineTransform();
               Font   font   =   g.getFont();
               Dimension d = font.createGlyphVector(g.getFontRenderContext(),""+(i*(max_width/30))).getVisualBounds().getBounds().getSize();
               //使用一个translation变换为要旋转的文本设置空间
               tr.setToTranslation(i*(max_width/30) , max_height-d.getWidth());
               g.transform(tr);
               g.transform(AffineTransform.getRotateInstance(Math.PI * (0.50f)));           
               g.drawString(""+(i*(max_width/30)), 0, 0);
               //g.drawString(""+(i*(max_width/30)), i*(max_width/30), max_height-g.getFont().getSize());
               g.setTransform(oldTransform);
           }

           g.setColor(Color.BLACK);
           g.setFont(new Font("Dialog", Font.PLAIN, 12));
          
           //中间坐标
           g.drawLine(max_width/2-20, 0, max_width/2-20, max_height-30);
           for(int i=0; i<10; i++){//中轴刻度
               g.drawString(""+(i*10)+"-"+(i*10+10), max_width/2-20, i*(max_height-30)/10);
               //绘制坐标虚线
               //g.drawLine(0, i*(max_height-30)/10, max_width/2-20, i*(max_height-30)/10);
               //g.drawLine(max_width/2+20, i*(max_height-30)/10, max_width, i*(max_height-30)/10);
               g.setColor(Color.YELLOW);
               int rand_left_x = new Random().nextInt(max_width/2-20);
               g.fill3DRect(rand_left_x, i*(max_height-30)/10, max_width/2-20-rand_left_x, 20, true);
               g.setColor(Color.GREEN);
               GradientPaint gp = new GradientPaint(180,190,Color.GREEN,220,120,Color.YELLOW,true);
               g.setPaint(gp);
               g.fill3DRect(max_width/2+20, i*(max_height-30)/10, new Random().nextInt(max_width/2-20), 20, true);
               g.setColor(Color.BLACK);
           }
          

           g.setColor(Color.BLACK);
           g.drawLine(max_width/2+20, 0, max_width/2+20, max_height-30);

       }
      
       public void add_backgroud_image(Graphics2D g){
           //设置为以透明方式绘制
           AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float).75);
           g.setComposite(ac);
           Image img = Toolkit.getDefaultToolkit().getImage("E:\\firefox\\后台模板\\admin-templates\\images\\login-wel.gif");
           g.drawImage(img, 0, 0, this);
       }
      
   } 
   /*
   *JToggleButton
   *
   *JToolBar
   *
   *hxz*/ 
   public class MyPainterDemo extends JFrame{ 
       JToggleButton[] button=new JToggleButton[3]; //按钮组 
       MyPainterPanel painter=new MyPainterPanel(); //绘图面板 
       public MyPainterDemo(){ 
              super("Java画图程序"); //调用父类构造函数 
              String[] buttonName={"保存","重画","关闭"}; //按钮文字 
              DrawShapeListener buttonListener=new DrawShapeListener(); //按钮事件 
              JToolBar toolBar=new JToolBar(); //实例化工具栏 
              ButtonGroup buttonGroup=new ButtonGroup(); //实例化按钮组 
               
              for (int i=0;i<button.length;i++){ 
                      button[i]=new JToggleButton(buttonName[i]); //实例化按钮 
                      button[i].addActionListener(buttonListener); //增加按钮事件处理 
                      buttonGroup.add(button[i]); //增加按钮到按钮组 
                      toolBar.add(button[i]); //增加按钮到工具栏 
              }
             

              Container container=getContentPane(); //得到窗口容器 
              container.add(toolBar,BorderLayout.NORTH); //增加组件到容器上 
              //painter = new MyPainterPanel(container.getMaximumSize().width,container.getMaximumSize().height);
              container.add(painter,BorderLayout.CENTER);
              System.out.println(getContentPane().getBounds().height);
              setSize(700,650); //设置窗口尺寸 
              //setResizable(false);
              Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();
              int splash_x=(int)((screensize.width-getWidth())/2);
              int splash_y=(int)((screensize.height-getHeight())/2);
              setBounds(splash_x,splash_y,getWidth(),getHeight());
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序  
              setVisible(true); //设置窗口为可视 
       } 
   //内部类 
       class DrawShapeListener implements ActionListener{ //按钮事件处理 
          public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button[0]) { // 判断来自于哪个按钮
                Component c = painter;
                BufferedImage bi = (BufferedImage) c.createImage(c.getWidth(),
                        c.getHeight());
                c.paint(bi.getGraphics());
                try {
                    File directory = new File(".");
                    javax.imageio.ImageIO.write(bi, "bmp", new File(directory
                            .getCanonicalPath()
                            + "/gant.bmp"));
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (e.getSource() == button[1]) { // 判断来自于哪个按钮
                painter.repaint();
            }
            if (e.getSource() == button[2]) { // 判断来自于哪个按钮
                System.exit(0);
            }
        } 
      } 
      
      public static void main(String[] args){ 
             new MyPainterDemo(); 
      } 
  } 
  
  
  
// 使用抗混叠技术,即平滑形状和文本的粗超像素边缘
//   g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//  
//   int cx = getSize().width / 2;
//   int cy = getSize().height / 2;
//  
//   //移动到画面中心
//   g2.translate(cx,cy);
//   //使画面旋转
//   g2.rotate(theta * Math.PI / 180);
//  
//      //保留旧的剪裁形状
//   Shape oldClip = g2.getClip();
//   //创建一个椭圆形状
//   Shape e = new Ellipse2D.Float(-cx, -cy, cx*2 ,cy*2);
//      //设置剪裁形状为一个椭圆
//   g2.clip(e);
//   //画一个椭圆
//   Shape c = new Ellipse2D.Float(-cx, -cy, cx*3/4 ,cy*2);
//   g2.setPaint(new GradientPaint(40, 40, Color.blue, 60, 50, Color.white, true));
//   g2.fill(c);
//   //画一个椭圆
//   g2.setPaint(Color.yellow);
//   g2.fillOval(cx/4, 0, cx, cy);
//   //设置剪裁形状为旧的剪裁形状
//   g2.setClip(oldClip);
//   //绘制文本
//   g2.setFont(new Font("Times New Roman", Font.PLAIN, 64));
//   g2.setPaint(new GradientPaint(-cx, 0, Color.red, cx, 0, Color.black, false));
//   g2.drawString("Hello, 2D!", -cx*3/4, cy/4);
//   //设置为以透明方式绘制
//   AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float).75);
//   g2.setComposite(ac);

//计算字体的长度  
//   private   Dimension   getBounds(Graphics2D   g2   ,   String   s)   {
//       Font   font   =   g2.getFont();
//       return   font.createGlyphVector(g2.getFontRenderContext(),s).getVisualBounds().getBounds().getSize();
//}   
  
  
  
//   Font   f   =   new   Font( "楷体_GB2312 ",   Font.PLAIN,   14);
//   TextLayout   tl   =   new   TextLayout( "文本 ",   f,   new   FontRenderContext(null,   false,   false));
//   int   width   =   (int)   tl.getBounds().getWidth();
//   int   height   =   (int)   (tl.getAscent()+tl.getDescent());  
  
  
   //图片处理
// 读入图片
//   File _file = new File(file1);
//   Image src = javax.imageio.ImageIO.read(_file);   //构造Image对象
//   int width = src.getWidth(null);     //得到图宽
//   int height = src.getHeight(null);     //得到图长
//
//               //图片放缩
//   BufferedImage tag = new BufferedImage(width / 2, height / 2,
//   BufferedImage.TYPE_INT_RGB);
//   tag.getGraphics().drawImage(src, 0, 0, width / 2, height / 2, null); //绘制缩小后的图

分享到:
评论

相关推荐

    java3dAPI文档

    为java3dAPI文档(英文版)为java3dAPI文档(英文版)

    Java3dApi chm

    最新的java3d api手册,是我自己在官网下载后编译制作的,希望你们喜欢

    java3Dapi(英文版)

    java3D 的 API,献给想学java3D的朋友。虽然是英文版,但是学过计算机的同学对于这样的英文应该不会什么都不懂吧。想要的下。

    Java2D编程--著名的Java大手动画

    4、在Java2Demo工程中,双击demo.html文档,如果一切正常,那么你会看Java大手的Applet小程序动画 目的:Java 2D编程是Java游戏编程的基础。使用Java 2D API编程写程序,可以简化多线程编程;代码看上去绝对比VC++的...

    Java多媒体技术

    书中涉及到的MediaAPI包括Java2DAPI、Java3DAPI、JavaSoundAPI、JMFAPI等,它们都是Java语言体系专为编写Java多媒体应用程序而开发的应用程序接口。本书包括的内容有:Java多媒体技术概述,Java二维图形图像处理技术...

    java 3d api 帮助文档 教程

    java 3d api 帮助文档 教程 java 3d api 帮助文档 教程

    dapi.js.rar

    dapi.js.rar

    C语言头文件 DAPI C语言头文件 DAPI

    C语言头文件 DAPIC语言头文件 DAPC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言头文件 DAPIC语言...

    使用移动3D API进行高级游戏开发.ppt

    使用移动3D API进行高级游戏开发.ppt

    DAPI使用教程

    很好的DAPI的使用教程,希望可以给大家以帮助啊!!!!!!

    Box2Dapi.chm

    搞了一阵APE物理引擎,简单好用,就是有一定局限性。又掉过头弄BOX2D,比APE上手麻烦点,不过还可以,提供个box2d的中文教程 大家共勉哈 补充一下啊,有的朋友说是c++版的,确实,书是c++版本的,但是 ...

    对大肠杆菌DAPI染色方法的改进

    对大肠杆菌DAPI染色方法的改进,杨丽,,目的,改进以大肠杆菌为代表的细菌类DAPI染色方法;方法,用传统染色方法和我们摸索出来的染色方法对两种大肠杆菌细胞进行染色,�

    java 2d API Java_2D_API_中文使用指_wrapper

    java 2d API Java_2D_API_中文使用指_wrapper 中文指南

    Eclipse GEF+Draw2DAPI

    Eclipse的图形编辑框架GEF的参考API,chm格式

    HTML5Canvas2DAPI规范1.0中文版

    资源名称:HTML5 Canvas 2D API 规范 1.0 中文版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Java Intensive 7 day Course(part3 高级篇)

    很不错的资源! Java Intensive 7 day Course JB1 1st day: Intro, Syntax, Semantics, ...JA2 7th day: Design Patterns II, Reviewing Design Patterns use in Java's API's, JFC architecture, 2DApi zip 3.7 MB

    js-dapi-client:用于访问Dash DAPI端点JavaScript客户端库

    DAPI客户端 用于访问Dash DAPI端点的客户端库 该库允许通过Dash主节点上托管的分散API( )与Dash区块链和Dash平台进行基于HTTP的交互。 DAPI-Client使用默认种子节点或用户提供的种子节点提供自动服务器(主节点...

    dapi:Dash网络的去中心化API

    DAPI Dash网络的去中心化API 目录 安装 npm install 依存关系 DAPI针对Node.js的最新LTS版本。 当前,这是Node v10.13。 DAPI需要具有Evolution功能(特殊分支存储库)的最新版 。...安装所有依赖项之后,可以通过

    BoX2D API 0.9版本

    box2d的游戏有福了, 该文档是比较完整的 BoX2D API 0.9版本

    D3DAPI ShadowMaap

    用D3DAPI改写DXUT的ShadowMaap

Global site tag (gtag.js) - Google Analytics