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结合实现一个你画我猜;

谈一谈java中的Canves机制的更多相关文章

  1. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  2. java中wait/notify机制

    通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕.如果图片还没有下载完,d ...

  3. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  4. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  5. 【Java】深入理解Java中的spi机制

    深入理解Java中的spi机制 SPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用 ...

  6. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

  7. 【夯实基础】- Java中的fail-fast机制

    转载自:Java中的fail-fast机制 遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过普通的for删除删除符合条件 ...

  8. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  9. 结合实战和源码来聊聊Java中的SPI机制?

    写在前面 SPI机制能够非常方便的为某个接口动态指定其实现类,在某种程度上,这也是某些框架具有高度可扩展性的基础.今天,我们就从源码级别深入探讨下Java中的SPI机制. 注:文章已收录到:https ...

随机推荐

  1. 大数据面试题——如何找出访问最多的IP

    问题描述: 现有海量日志数据保存在一个超大的文件中,该文件无法直接存入内存,要求从 中提取某天访问BD次数最多的IP 分析解读: 由于这个题目只关心某一天访问次数最多的IP,因此可以首先对文件进行一次 ...

  2. OpenCV3如何使用SIFT和SURF Where did SIFT and SURF go in OpenCV 3?

    Installation and Usage If you have previous/other version of OpenCV installed (e.g. cv2 module in th ...

  3. 九州动态ip的特色

    九州代理是一款高覆盖的换ip软件,范围可覆盖全国160多个城市.软件可用于游戏试玩.游戏挂机.营销.优化.文档分享.管理.问答推广.数据采集.点赞.增效回访.用户注册等.“九州代理”仅提供国内网络节点 ...

  4. 数据库更新记录时,记录不存在则创建的sql语句

    INSERT INTO 表名 (字段1(主键),字段2,字段3) values (#{value1},#{value2},#{value3}) ON DUPLICATE KEY UPDATE 字段2= ...

  5. R语言实战基本方法

    R语言的主要功能包括数据统计分析方法和数据可视化,数据分析在这一章中主要学习创建基本图形和基本数据分析 一 基本图形 1条形图 barplot(height)  //添加一个条形图,height是一个 ...

  6. 泛型--增强for循环--数组和集合转换

    1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 ...

  7. IRP小结 0x01 IRP & IO_STACK_LOCATION(结合WRK理解)

    写博客整理记录一下IRP相关的知识点,加深一下印象. 所有的I/O请求都是以IRP的形式提交的.当I/O管理器为了响应某个线程调用的的I/O API的时候,就会构造一个IRP,用于在I/O系统处理这个 ...

  8. 数列全排列问题----递归实现--JAVA

    public class PaiLie { /** * @param args */ public static void main(String[] args) { PaiLie p=new Pai ...

  9. C#的ArrayList与JS的push,转字符串逗号分隔

    拼接字符串是常用的基本代码,但是还是有很多人习惯用"+"拼接字符串,这样做有以下缺点: 1)为了去掉尾部(或头部)分隔符,写法复杂 2)容易出现BUG报错,比如空值 C#中推荐大家 ...

  10. LCA(tarjan)

    这是LCA算法中的一种,Tarjan算法 其实这么说也有点不对,应该是Tarjan+DFS进行解决 LCA又称为最近公共祖先 那么什么是最近公共祖先: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...