通过java2dAPI绘制报表

    /*
    *只画直线,矩形,椭圆,只能向右下角画
    *
    *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); //绘制缩小后的图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值