`
小篮子java的家
  • 浏览: 30985 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

重绘-刷新的程序语言

阅读更多
画板实现重绘和橡皮擦


重绘的实现主要在首先要自定义一个通用队列  然后再处理鼠标监听的
类中 实例化静态一个队列对象 以方便直接调用 然后画完各种图形后
将画图的对象加载到队列中保存  然后再重写paint函数 首先调用父类的paint函数
再利用循环调用加载在队列中的画图对象

橡皮擦首先是创建按钮 然后按处理曲线的方法一样处理监听器 唯一的不同之处是
首先在传递颜色的参数时  将颜色定义成画布颜色一致 RGB的(238 238 238)

package net.java.t071301;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;


public class DrawFrame extends JFrame{

	public static  void main (String args []){
		
		   DrawFrame df = new DrawFrame();
		   df.init();
	}

	public void init() {
	   this.setTitle("简易画板");
	   this.setLocationRelativeTo(null);
	   this.setDefaultCloseOperation(2);
	   this.setSize(600, 400);
	   this.setResizable(false);
	   FlowLayout fl= new  FlowLayout();
	   this.setLayout(fl);
	   JButton jbt1= new JButton("直线");
	   jbt1.setActionCommand("line");
	   this.add(jbt1);
	   JButton jbt2= new JButton("曲线");
	   jbt2.setActionCommand("curve");
	   this.add(jbt2);
	   JButton jbt3= new JButton("圆形");
	   jbt3.setActionCommand("oval");
	   this.add(jbt3);
	   JButton jbt4= new JButton("矩形");
	   jbt4.setActionCommand("rect");
	   this.add(jbt4);
	   JButton jbt5= new JButton("填充圆");
	   jbt5.setActionCommand("filloval");
	   this.add(jbt5);
	   JButton jbt6= new JButton("填充矩形");
	   jbt6.setActionCommand("fillrect");
	   this.add(jbt6);
	   JButton jbt7= new JButton("颜色");
	   jbt7.setActionCommand("color");
	   this.add(jbt7);
	   JButton jbt8= new JButton("橡皮擦");
	   jbt8.setActionCommand("erase");
	   this.add(jbt8);
	   
	   ActionListener al = new ActionListener(){
		 
		public void actionPerformed(ActionEvent e) {
	
			 if(e.getActionCommand()=="color" ){
				  color = JColorChooser.showDialog(null,"颜色选择器",Color.BLACK);	
			   }
			 else{
				 items = e.getActionCommand();
				 }
		}
	   };
	   
	   jbt1.addActionListener(al);
	   jbt2.addActionListener(al);
	   jbt3.addActionListener(al);
	   jbt4.addActionListener(al);
	   jbt5.addActionListener(al);
	   jbt6.addActionListener(al);
	   jbt7.addActionListener(al);
	   jbt8.addActionListener(al);
	  
	   this.setVisible(true);
	   
	   Graphics g = this.getGraphics();
	  
	   DrawListener dl = new DrawListener(g,this);
	   
	   this.addMouseListener(dl);
	   this.addMouseMotionListener(dl);
	 
	    }
	  //重写一个绘制方法
	 public void paint(Graphics g){
		   super.paint(g);
		   for(int i=0;i<DrawListener.qi.size();i++){
			   Draw draw=DrawListener.qi.get(i);
			   draw.draw(g);
		   }
	   
	}
	public Color getColor(){
		return color;
	}
	public String getItems(){
		return items;
	}
	private Color color =Color.BLACK;
	private String items="line";
}


package net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class DrawListener implements MouseListener, MouseMotionListener{
          
	private Graphics g;
	private DrawFrame df;
	int x1,y1,x2,y2;
	public static QueueIplm<Draw> qi=new QueueIplm<Draw> ();
	public DrawListener(Graphics g , DrawFrame df){
		this.g=g;
		this.df=df;
	}

	public void mousePressed(MouseEvent e) {
		x1=e.getX();
		y1=e.getY();	
	}

	public void mouseReleased(MouseEvent e) {
	      x2=e.getX();
	      y2=e.getY();
	      Draw draw;
	    if(df.getItems().equals("line")){
	    	draw = new DrawLine(x1,y1,x2,y2,df.getColor());
	    	draw.draw(g); 
	    	 qi.add(draw);
	    } 
	    else  if(df.getItems().equals("oval")){
	    	draw = new DrawOval(x1,y1,Math.abs(x2-x1), Math.abs(y2-y1),df.getColor());
	    	draw.draw(g);
	    	 qi.add(draw);
	    }
	    else  if(df.getItems().equals("rect")){
	    	draw = new DrawRect(x1,y1,Math.abs(x2-x1), Math.abs(y2-y1),df.getColor());
	    	draw.draw(g);
	    	 qi.add(draw);
	    }
	    else  if(df.getItems().equals("fillrect")){
	    	draw = new DrawFillRect(x1,y1,Math.abs(x2-x1), Math.abs(y2-y1),df.getColor());
	    	draw.draw(g);
	    	 qi.add(draw);
	    }
	    else  if(df.getItems().equals("filloval")){
	    	draw = new DrawFillOval(x1,y1,Math.abs(x2-x1), Math.abs(y2-y1),df.getColor());
	    	draw.draw(g);
	    	 qi.add(draw);
	    }
	   
	}
      public void mouseDragged(MouseEvent e) {
    	  x2=e.getX();
	      y2=e.getY();
	      Draw draw;
	    if(df.getItems().equals("curve")){
	    	draw = new DrawLine(x1,y1,x2,y2,df.getColor());
	    	draw.draw(g);
	    	x1=x2;
	    	y1=y2;
	    	qi.add(draw);}
	    else if(df.getItems().equals("erase")){
	    	Color cr = new Color(238,238,238);
	    	float[] hsbvals = null;
	    	float[] objx=cr.RGBtoHSB(238, 238, 238, hsbvals);
	    	float a=objx[0];
	    	float b=objx[1];
	    	float c=objx[2];
	    draw = new DrawLine(x1,y1,x2,y2,Color.getHSBColor(a, b, c));
     	draw.draw(g);
    	x1=x2;
    	y1=y2;
    	qi.add(draw);
	    } 
	}  
	    
	public void mouseEntered(MouseEvent e) {
	}
	
	public void mouseExited(MouseEvent e) {	
	}
	
	public void mouseMoved(MouseEvent e) {
	}
	
	public void mouseClicked(MouseEvent e) {
	}
	}


ackage net.java.t071301;

import java.awt.Graphics;

public abstract class Draw {
	
       public abstract void draw(Graphics g);
}


package net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class Drawerase extends Draw{
        private Color color;
        private int x1,y1,x2,y2;
	
	public	Drawerase(int x1,int y1,int x2,int y2,Color color){
		this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
		}

	public void draw(Graphics g) {
		 g.setColor(color);
	     g.drawLine(x1, y1, x2, y2);
	}
  
}


ackage net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class DrawFillOval extends Draw{
	 private int x1,y1,x2,y2;
	 private  Color color;
	 
	public DrawFillOval(int x1,int y1,int x2,int y2, Color color){
		 this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
	}

	public void draw(Graphics g) {
		g.setColor(color);
		g.fillOval(x1, y1, x2, y2);
	}

}


package net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class DrawFillRect extends Draw{
	 private int x1,y1,x2,y2;
	 private  Color color;
	 
	public DrawFillRect(int x1,int y1,int x2,int y2, Color color){
		 this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
	}

	public void draw(Graphics g) {
		g.setColor(color);
		g.fillRect(x1, y1, x2, y2);
	}

}



ackage net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class DrawLine extends Draw{
	 private int x1,y1,x2,y2;
	 private  Color color;
	public DrawLine(int x1,int y1,int x2,int y2, Color color){
		 this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
	}

	public void draw(Graphics g) {
		g.setColor(color);
		g.drawLine(x1, y1, x2, y2);
	}

}


package net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class DrawOval extends Draw{
	 private int x1,y1,x2,y2;
	 private  Color color;
	 
	public DrawOval(int x1,int y1,int x2,int y2, Color color){
		 this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
	}

	public void draw(Graphics g) {
		g.setColor(color);
		g.drawOval(x1, y1, x2, y2);
	}

}



package net.java.t071301;

import java.awt.Color;
import java.awt.Graphics;

public class DrawRect extends Draw{
	 private int x1,y1,x2,y2;
	 private  Color color;
	 
	public DrawRect(int x1,int y1,int x2,int y2, Color color){
		 this.x1=x1;
		 this.y1=y1;
		 this.x2=x2;
		 this.y2=y2;
		 this.color=color;
	}

	public void draw(Graphics g) {
		g.setColor(color);
		g.drawRect(x1, y1, x2, y2);
	}

}



package net.java.t071301;

public interface Queue<E> {
	
	//得到指定位置的对象
    public E get(int index);
    
    //加入一个对象
    public void  add(E e);
    
    //在指定的位置插入一个对象
    public void insert (E e, int index);
    
    public void addall(QueueIplm<E>  list);
    
    //删除指定位置的对象
    public E delete(int index);
   
    //得到队列中的元素
    public int size();    
}

package net.java.t071301;

public class QueueIplm<E> implements Queue<E>{
 
	private  Object[] obj=null;
	private int initCount =0;
	private int incresCount =1;
	
	public QueueIplm(){ 
		 obj = new Object[0];
	}
	public QueueIplm(int initCount){ 
		this.initCount=initCount;
		 obj = new Object[initCount];
	}
	public QueueIplm(int initCount, int incresCount){ 
		this.initCount=initCount;
		this.incresCount=incresCount;
		 obj = new Object[initCount];
	}
	
	
	public void add(E e) {
		Object[] temp = new Object[obj.length + incresCount];
		for (int i = 0; i < obj.length; i++) {
			temp[i] = obj[i];
		}
		temp[obj.length] = e;
		this.initCount++;
		obj = temp;
	}

	public void addall(QueueIplm<E> list) {
		Object[] temp = new Object[obj.length + list.size()];
		for (int i = 0; i < obj.length; i++) {
			temp[i] = obj[i];
		}
		for (int i = 0; i < list.size(); i++) {
			temp[i + obj.length] = list.get(i);
			this.initCount++;
		}
		obj = temp;
		
	}


	public E delete(int index) {
		E item = (E) obj[index];
		for (int i = index; i < obj.length; i++) {
			obj[i] = obj[i + 1];
		}
		this.initCount--;
		return item;
	}
	public E get(int index) {
		if (index < 0 || index > initCount)
			return null;
		E item = (E) obj[index];
		return item;
		
	}


	public void insert(E e,int index) {
		obj[index] = e;
	}


	public int size(){
		return initCount;
		
	}

}

分享到:
评论
1 楼 Fhappy 2011-10-22  
应该要有点注释的

相关推荐

    vc++ 开发实例源码包

    4:支持多语言. 5:操作综合其它软件. 6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的弹出滑动消息提示框. 10:下载管理,虚拟文件夹. 11:自动ping. 12:...

    OpenGL编程指南.pdf

    1.7.2动画=重绘+交换 第2章状态管理和绘制几何物体 2.1绘图工具箱 2.1.1清除窗口 2.1.2指定颜色 2.1.3强制完成绘图操作 2.1.4坐标系统工具箱 2.2描述点、直线和多边形 2.2.1什么是点、直线和多边形? 2.2.2指定顶点 ...

    PT80-NEAT开发指南v1.1

    第三章 PT80 NEAT 编程基础 ..................................................................................................................... 17 事件驱动和消息响应机制 .................................

    java源码包---java 源码 大量 实例

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    Trello Folds (Kanban for Trello)-crx插件

    -) -修复了导致紧凑模式下的合并列表无法正确重绘的错误(问题#45)0.7中的新增功能========================================================================================================================...

    VB控件属性使用大全

    VisualBasic提供可视化设计工具,编程人员可利用VisualBasic提供的控件轻松的“画”出应用程序的友好界面,因此容易入门,入门以后就有能力进一步学习难度更大的编程语言。VisualBasic作为编程人员的首选程序设计...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...

    API之网络函数---整理网络函数及功能

    VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 VerQueryValue 这个函数用于从版本资源中获取信息 WriteFile 将数据写入一个文件 WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并...

    C#编程经验技巧宝典

    4 &lt;br&gt;0008 为程序设置版本和帮助信息 4 &lt;br&gt;0009 设置Windows应用程序启动窗体 5 &lt;br&gt;0010 设置Web应用程序起始页 5 &lt;br&gt;0011 如何设置程序的出错窗口 5 &lt;br&gt;0012 如何进行程序调试 6 ...

    JAVA上百实例源码以及开源项目源代码

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    JAVA上百实例源码以及开源项目

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    ASP.NET 3.5 开发大全11-15

    16.3.3 母版页刷新内容窗体 16.4 小结 第17章 ASP.NET MVC基础 17.1 了解MVC 17.1.1 MVC和Web Form 17.1.2 ASP.NET MVC的运行结构 17.2 ASP.NET MVC基础 17.2.1 安装ASP.NET MVC 17.2.2 新建一个MVC应用程序 17.2.3 ...

    ASP.NET 3.5 开发大全1-5

    16.3.3 母版页刷新内容窗体 16.4 小结 第17章 ASP.NET MVC基础 17.1 了解MVC 17.1.1 MVC和Web Form 17.1.2 ASP.NET MVC的运行结构 17.2 ASP.NET MVC基础 17.2.1 安装ASP.NET MVC 17.2.2 新建一个MVC应用程序 17.2.3 ...

    java源码包2

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    ASP.NET3.5从入门到精通

    16.3.3 母版页刷新内容窗体 16.4 小结 第 17 章 ASP.NET MVC 基础 17.1 了解MVC 17.1.1 MVC 和Web Form 17.1.2 ASP.NET MVC 的运行结构 17.2 ASP.NET MVC 基础 17.2.1 安装ASP.NET MVC 17.2.2 新建一个MVC 应用程序 ...

    java源码包3

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    java源码包4

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    全书分6篇共25章,主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows...

Global site tag (gtag.js) - Google Analytics