zoukankan      html  css  js  c++  java
  • 同步Java之重绘

      广州疯狂java专注于java培训,通过科学标准的java培训,让零基础学员快速成长为高端java开发工程师,迅速成为企业最急需技术型人才,成功进入IT名企。

      重绘,顾名思义,是要将我们所绘制过的图形重新绘制一遍以显示到屏幕上,上一篇说的是用数组来保存形状,那是否还有别的方法做到重绘呢?

      试想,我们是不是可以把绘制的图形保存成一张图片,然后将它显示出来。这就要用到一个Robot方法,来捕捉我们屏幕上的每个像素点。

      我们做画板时继承的是JFrame类,那如果继续继承窗体这一类,在截屏时就会截到窗体的边框,再打印出来后就会把整个窗体都显示在画布上。所以为了正确的截屏,我们让画板继承JPanel类。这样只需要传入一个面板对象,将它添加到窗体上就可以实现:

      Java代码

      public class Draw extends JPanel{

      public static void main(String[] args) {

      // 实例化窗体对象

      Draw pan = new Draw();

      pan.enter(pan);

      }

      private void enter(JPanel pan) {

      //实例化一个窗体对象

      JFrame frame = new JFrame();

      // 设置属性

      frame.setTitle("简单画板");

      frame.setSize(600, 480);

      frame.setDefaultCloseOperation(3);

      frame.setLocationRelativeTo(null);

      //将pan面板添加到窗体上

      frame.add(pan);

      frame.setVisible(true);

      //获取画布对象

      Graphics g = pan.getGraphics();

      //实例化事件处理类的对象

      Listener dl = new Listener(g,this);

      //给事件源添加鼠标监听器方法

      pan.addMouseListener(dl);

      }

      这时,我们就要往监听器中添加模块了,首先要传入画布对象和面板对象,然后获取面板左上角的位置已经面板大小,这样就可以截取屏幕了,最后我们只需将图像按照像素分割成单独的点,并将每个点的颜色存入数组。

      Java代码

      public class Listener implements MouseListener {

      private int x1,y1,x2,y2;

      private Graphics g;

      private Draw du;

      Robot rob;

      public static int image[][];

      //创建监听器对象时传入一个画布对象

      public Listener(Graphics g,Draw du){

      this.g=g;

      this.du=du;

      try{

      rob = new Robot();

      }catch(AWTException e){

      e.printStackTrace();

      }

      }

      public void mouseReleased(MouseEvent e) {

      g.setColor(new Color(0, 0, 0));

      // 鼠标释放时候光标的位置

      x2 = e.getX();

      y2 = e.getY();

      g.drawLine(x1, y1, x2, y2);

      //获取pan面板左上角的位置和窗体大小

      Point p = du.getLocationOnScreen();

      Dimension dim = du.getSize();

      // 创建矩形对象

      Rectangle rect = new Rectangle(p, dim);

      // 截取屏幕

      BufferedImage img = rob.createScreenCapture(rect);

      image = new int[img.getHeight()][img.getWidth()];

      //将图像按照像素分割成一个一个的点,将点的颜色存入数组

      for(int i=0;i

      for(int j=0;j

      //将颜色存入数组

      image[i][j] = img.getRGB(j, i);

      }

      }

      }

      }

      [注]:这里继承MouseListener需要实现的其它方法省略。

      现在只差最后一步就可以完成整个重绘了,那就是在画板类中实现重绘的方法:

      Java代码

      public void paint(Graphics g) {

      // 调用父类的方法来正确的绘制窗体

      super.paint(g);

      // 如果数组存在,就重绘数据

      if (null != Listener.image) {

      // 重绘数组

      for (int i = 0; i < Listener.image.length; i++) {

      for (int j = 0; j < Listener.image[i].length; j++) {

      // 获取颜色

      int c = Listener.image[i][j];

      // 创建颜色对象

      Color color = new Color(c);

      g.setColor(color);

      g.drawLine(j, i, j, i);

      }

      }

      }

      }

      这样,我们就完成了重绘的另一种方法。

      疯狂Java培训紧跟最前沿的技术潮流,采用的都是企业最真实的项目开发,培养学生的实践动手能力。技术在不断更新换代,在疯狂软件学院你能学到最前沿的Java技术,疯狂Java培训主要培养的是Java专业人才。学员毕业之后的代码量至少达到项目经理的水平。疯狂软件学院有完善的就业服务机制,学员毕业时,可以享受免费终身推荐就业服务。根据学员的特点和企业的要求,为学员推荐最合适的岗位。

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/gojava/p/3372316.html
Copyright © 2011-2022 走看看