zoukankan      html  css  js  c++  java
  • 谈一谈java中的Canves机制

    0--写在前面:

      很多初学java的童鞋,常常很苦恼,一天天的都跟命令行较劲,好像很无聊的样子,如果能跳出命令行做出界面甚至一个画图界面,那将是一件很兴奋的事情;也可以让编程变的有趣;有脑洞的同学还可以利用图像做出java小游戏来;话不多说开整;

     1--什么是javaGUI组件:

      GUI组件是java为用户提供的一个图形界面接口,通俗的说就是java中提供了一些类,大家可以用这些类创造各种窗口呀,文本框呀,面板什么的;并且提供了一些布局方式,也就是我们所说的布局管理器,这个随笔主要讲一下Canves这个组件的功能;这些组件几乎都被包含在java.awt 和java.swing包中(当然我没有包括第三方包),个人感觉Swing中的组件颜值都比awt中的高

    2--什么是Canves;

      从翻译上讲,canves是画布,帆布的意思,我也习惯把这个组件直接称为画布,因为我们可以根据自己的想象,画出任意自己想要的东西,Canves在java的awt包中 ,要实现它有三个方法paint(g),update(g),repaint(g);

    3--如何使用canves:

      Canves在创造出来自后,首先会调用paint方法,paint方法中有一个g参数;是java.awt.Graphics 类的子类的对象,可以用这个对象对画布惊醒任何操作;想画圆画圆,想画方画方毫无压力;画好后这个图就不动了;第一步就是重写这个paint方法;在canves生成后,在要做的就是怎么重重绘了,重写update(g)方法和上面g的用法一样;然后需要重绘会后Canves会调用一个新的线程来重绘这个canves;简单说就是在生成第一个图的时候,调用的是paint,之后需要外部的一个update来调用你重写过的repaint来进行重绘;

    ------文字是苍白的,上代码吧;

    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.ArrayList;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class App extends Canvas {
        JButton jb=new JButton();
        ArrayList<Line> list=new ArrayList<Line>();
        Line lastline=new Line();
        Bean lastbean=null;
        public App() {
            this.setPreferredSize(new Dimension(300,300));
        }
        public void paint(java.awt.Graphics g) {
    
            App that=this;
            
            this.addMouseListener(new MouseListener() {
    
                @Override
                public void mouseClicked(MouseEvent e) {
                    
                }
    
                @Override
                public void mouseEntered(MouseEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void mouseExited(MouseEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
    
                @Override
                public void mousePressed(MouseEvent e) {
                    // TODO Auto-generated method stub
                    // TODO Auto-generated method stub
                    int x=e.getX();
                    int y=e.getY();
                    if(that.lastbean==null) {
                        that.lastbean=new Bean(x-1,y);
                    }
                    Bean nowPoint=new Bean(x,y);
                    System.out.println("nowpoint:x:"+x+",y:"+y);
                    System.out.println("lastbean:x:"+x+",y:"+y);
                    System.out.println(that.lastline.beans.size());
                    that.lastline.add(nowPoint);
                    that.repaint();
                    
                }
    
                @Override
                public void mouseReleased(MouseEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
            });
        }
        public void update(java.awt.Graphics g) {
            //g.clearRect(0, 0, 300, 300);
            /*if(list.isEmpty()) {
            }else{*/
                Bean bean=this.lastline.getlast();
                System.out.println("-----------------");
                g.setColor(Color.black);
                g.drawLine(lastbean.getX(), lastbean.getY(), bean.getX(),bean.getY());
                this.lastbean=this.lastline.getlast();
            //}
            
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JFrame j=new JFrame();
            j.add(new App());
            j.pack();
            j.setVisible(true);
        }
    
    }

    这段代码实现了第一次绘图和重绘,只要在面板上点击就会在面板上挨个连点;

    预告一下下一篇博客,应该是应用这次的绘图和上一次的socket结合实现一个你画我猜;

  • 相关阅读:
    web应用/http协议/web框架
    算法-排序-1.冒泡排序/2.选择排序/3.插入排序
    算法-基础和查找-1.汉诺塔/2.顺序查找/3.二分查找/4.顺序查找和二分查找的比较
    前端开发
    前端开发
    前端开发
    前端开发
    数据库
    LeetCode : Add Binary
    LeetCode : Length of Last Word
  • 原文地址:https://www.cnblogs.com/mayeye/p/9581723.html
Copyright © 2011-2022 走看看