`
ry.china
  • 浏览: 139888 次
  • 性别: 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(英文版)

    8. **Interactivity**:Java 3D也支持用户交互,例如通过鼠标和键盘控制视角、选择对象或触发事件。这使得开发者可以创建交互式的3D应用。 学习Java 3D API,即使英文版,对计算机科学背景的人来说并不构成太大障碍...

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

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

    java 3d api 帮助文档 教程

    Java 3D API 是一种基于Java语言的高级图形渲染库,用于在三维空间中创建...通过这个Java 3D API帮助文档和教程,开发者将获得创建引人入胜的三维应用程序所需的知识和技巧,无论是入门还是进阶,都能找到对应的指导。

    java 2d API Java_2D_API_中文使用指_wrapper

    2. 使用绘图方法:通过Graphics2D对象调用各种方法来绘制基本图形,或者进行更复杂的图形操作。 3. 设置渲染属性:可以设置笔触(Stroke)、颜色、透明度、合成规则等属性,以获得所需的绘图效果。 4. 使用变换:...

    Java多媒体技术

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

    dapi.js.rar

    2. **异步处理**:由于JavaScript的单线程特性,dapi.js可能包含了Promise或async/await的异步处理机制,以处理网络请求或其他耗时操作。 3. **错误处理**:良好的错误处理机制是任何API库的关键,dapi.js可能会...

    Eclipse GEF+Draw2DAPI

    通过阅读这两个API文档,开发者可以学习如何初始化和配置GEF编辑器,创建和操作EditParts,使用Draw2D进行图形绘制,以及如何结合RCP来构建一个完整的图形编辑应用。同时,文档还可能包含示例代码和常见问题解答,...

    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++版本的,但是 ...

    BoX2D API 0.9版本

    2. **Shape**: `b2Shape` 是所有几何形状的基类,包括`b2CircleShape`(圆形)、`b2PolygonShape`(多边形)和`b2EdgeShape`(边缘)。开发者可以利用这些形状来构建物体的轮廓,进行碰撞检测。 3. **Fixture**: `...

    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

    Java2DGameEngineDev:2D游戏

    Java2DGameEngineDev是一个基于Java技术开发的2D游戏引擎...这将帮助他们理解和学习如何利用Java2DAPI来构建自己的2D游戏。通过学习这个项目,开发者不仅能掌握Java2D图形编程,还能了解游戏开发的基本架构和设计模式。

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

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

    dapi

    标题中的“dapi”可能指的是DNA的染色技术——DAPI(4',6-二脒基-2-苯基吲哚),这是一种常用的荧光染料,用于标记和可视化细胞核中的DNA。在生物学研究和医学实验中,DAPI被广泛使用,因为它能够强烈结合DNA并发出...

Global site tag (gtag.js) - Google Analytics