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

画板的实现

阅读更多
画板的是实现的思路

第一部 自定义一个DrawFrame类继承系统的JFrame类

第二部 自定义一个显示方法 设置窗体的名称 大小 居中等属性

第三部 创建几个按钮 并加载到当前对象上

第四步 为按钮设置监听器 并实现事件处理 具体来说 就在为按钮设置一个动作命令
然后在处理事件的时侯判断是哪个按钮发生了动作 若是颜色 将得到的颜色赋值给私有属性
color 若是其他的按钮赋给私有属性item。

第五步 设置鼠标监听器 将监听到的消息 传给事件处理类

第六步 明确处理类中要有一个构造函数参数分别是 从DrawFrame中传递来的当前的画布对象 和当前对象

第七步 注意在 处理类DrawListener中设置画布对象属性 当前对象的属性 以及4个坐标属性。

第八步 明确处理类要实现 MouseListener,MouseMotionListener 接口所以要重写接口中的方法
在mousePressed方法中将第一个点的坐赋给x1,y1在mouseReleased将第二点的坐标赋给
x2,y2 并判断当前按下的按钮是谁 设置当前的颜色 其他的方法也要重写 可以不实现

第九步 自定义一个抽象类Draw 再分别定义画直线 曲线的类 继承自该类 并复写其方法
值得注意的是画布对象在不同的子类中要调用不同的方法处理 画图功能

第十步 因为以及判断好当前按钮是谁 再在以前的基础上不同的按钮 用几个不同的画图类实例化不同的对象
调用各自的方法 画图 (注意 因为曲线的特殊性 要特别处理)

第十一步在drawframe类中 写一个主函数 并且实例化一个对象 调用显示方法




package net.java.t071001;

import java.awt.Color;
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.JFrame;

/**
 * 定义一个DrawFram类继承Frame
 */
public class DrawFrame extends JFrame {

	//主函数
	public static void main(String[] args) {
		DrawFrame df =new DrawFrame();
	    df.init();

	}
  //定义一个init()方法
 public void  init(){
	 this.setTitle("画板");//设置名字为画板
	 this.setLocationRelativeTo(null);//设置位置为居中显示
	 this.setSize(400,600);//设置大小
	 this.setResizable(false);//设置大小不可变
	 this.setDefaultCloseOperation(3);//设置关闭窗口时程序退出
	 FlowLayout fl = new FlowLayout();//设置布局
	 this.setLayout(fl);
	 
	 JButton jline = new JButton("画直线");//实例化一个画直线的按钮
	 jline.setActionCommand("Line");//设置动作命令
	 
	 JButton jCurve = new JButton("画曲线");//实例化一个画曲线的按钮
	 jCurve.setActionCommand("Curve");//设置动作命令
	 
	 JButton jOval= new JButton("画圆");//实例化一个画圆的按钮
	 jOval .setActionCommand("Oval");///设置动作命令
	 
	 JButton jRect = new JButton("画矩形");//实例化一个画矩形的按钮
	 jRect.setActionCommand("Rect");//设置动作命令
	 
	 JButton jFillOval = new JButton("画填充圆");//实例化一个画填充圆的按钮
	 jFillOval.setActionCommand("FillOval");//设置动作命令
	 
	 JButton jFillRect = new JButton("画填充矩形");//实例化一个画填充矩形的按钮
	 jFillRect.setActionCommand("FillRect");//设置动作命令
	 
	 JButton jColor = new JButton("颜色");//实例化一个颜色的按钮
	 jColor .setActionCommand("Color");//设置动作命令
	
	 this.add(jline);//把按钮加到窗体上
	 this.add(jCurve);
	 this.add(jOval);
	 this.add(jRect);
	 this.add(jFillOval);
	 this.add(jFillRect);
	 this.add(jColor);

	 
   ActionListener al =new ActionListener(){

	public void actionPerformed(ActionEvent e) {
	
		if(e.getActionCommand().equals("Color")){
			// JColorChooser类是一个颜色选择面板,使用showDialog方法将界面显示出来,null表示没有指定父窗体,第二参数是标题,但三个参数是默认的颜色
			color = javax.swing.JColorChooser.showDialog(null,
					"颜色选择器", Color.BLACK);
		}
		else {
			// 得按钮上的动作命令值。
			item = e.getActionCommand();
		}
       }
   };
	jline.addActionListener(al);//将监听器加到按钮上
	jCurve.addActionListener(al);
	jOval.addActionListener(al);
	jRect.addActionListener(al);
	jFillOval.addActionListener(al);
	jFillRect.addActionListener(al);
	jColor.addActionListener(al);
	// 窗体可见
	this.setVisible(true);
	//获取画布对象
	Graphics g = this.getGraphics();
	
	//实例化画图形事件处理类的对象
	DrawListener dl = new DrawListener(g,this);
	
	//给窗体添加鼠标监听器
	this.addMouseListener(dl);
	this.addMouseMotionListener(dl);	
   }

	//定义公有的方法用来获取颜色
	public Color getColor(){
		return color;
	}
	//定义公有的方法用来获取选择的图形
	public String getItem(){
		return item;
	}
//定义颜色属性
	private Color color = Color.BLACK;
	//定义图形属性
	private String item = "Line";	
}

package net.java.t071001;

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 int x1,y1,x2,y2;
	
	private Graphics g;
	private DrawFrame df;
	
	//接收画布对象的构造函数
	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.getItem().equals("Line")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画直线类的对象
		draw = new DrawLine();
		//调用画直线的方法
		draw.draw(g, x1, y1, x2, y2);
	}	
	else 
		if(df.getItem().equals("Oval")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画类的对象
		draw = new DrawOval();
		//调用画圆形的方法
		draw.draw(g, x1, y1,Math.abs(x1-x2), Math.abs(y1-y2));
		}
	else if(df.getItem().equals("Rect")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画类的对象
		draw = new DrawRect();
		//调用画矩形的方法
		draw.draw(g, x1, y1,Math.abs(x1-x2), Math.abs(y1-y2));
		}
	else if(df.getItem().equals("FillRect")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画类的对象
		draw = new DrawFillRect();
		//调用画填充矩形的方法
		draw.draw(g, x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
		}
	else if(df.getItem().equals("FillOval")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画类的对象
		draw = new DrawFillOval();
		//调用画填充圆形的方法
		draw.draw(g, x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
		}
}

//重写鼠标拖动触发方法
public void mouseDragged(MouseEvent e) {
	//在鼠标释放的时候就获取第二个坐标点的值
	x2 = e.getX();
	y2 = e.getY();
	Draw draw;
	//判断点击的是否是直线
	if(df.getItem().equals("Curve")){
		//得到你选择的颜色设置当前图形的颜色
		g.setColor(df.getColor());
		//实例化画直线类的对象
		draw = new DrawLine();
		//调用画曲线的方法
		draw.draw(g, x1, y1, x2, y2);
		//互换坐标
		x1 = x2;
		y1 = y2;
	}	
}
public void mouseClicked(MouseEvent arg0) {	
}

public void mouseEntered(MouseEvent arg0) {	
}

public void mouseExited(MouseEvent arg0) {	
}

public void mouseMoved(MouseEvent arg0) {	
}
}


package net.java.t071001;

import java.awt.Graphics;

/**
 * 定义一个Draw抽象类
 * @author 汤剑男
 *
 */
public abstract class Draw {
      //定义一个画图的方法
	public abstract void draw(Graphics g, int x1, int y1, int x2, int y2);
}



package net.java.t071001;

import java.awt.Graphics;

/**
 * 定义一个drawline类继承抽象类 draw
 * 
 */

public class DrawLine extends Draw {

	//重写draw抽象类中的draw抽象方法
	public void draw(Graphics g, int x1, int y1, int x2, int y2) {
		//输出信息
		System.out.println("画直线");
		// 调用画直线的方法
		g.drawLine(x1, y1, x2, y2);
		
	}
}

package net.java.t071001;
import java.awt.Graphics;

/**
 * 定义一个drawoval类继承抽象类 draw
 * 
 */

public class DrawOval extends Draw {

	//重写draw抽象类中的draw抽象方法
	public void draw(Graphics g, int x1, int y1, int x2, int y2) {
		//输出信息
		System.out.println("画圆形");
		// 调用画圆形的方法
		g.drawOval(x1, y1, x2, y2);
		
	}
}

package net.java.t071001;
import java.awt.Graphics;

/**
 * 定义一个drawrect类继承抽象类 draw
 * 
 */

public class DrawRect extends Draw {

	//重写draw抽象类中的draw抽象方法
	public void draw(Graphics g, int x1, int y1, int x2, int y2) {
		//输出信息
		System.out.println("画矩形");
		// 调用画矩形的方法
		g.drawRect(x1, y1, x2, y2);
		
	}
}


package net.java.t071001;

import java.awt.Graphics;

public class DrawFillOval extends Draw {

	//重写draw抽象类中的draw抽象方法
	public void draw(Graphics g, int x1, int y1, int x2, int y2) {
		//输出信息
		System.out.println("画填充圆");
		// 调用画填充圆的方法
		g.fillOval(x1, y1, x2, y2);
		
	}
 
}



ackage net.java.t071001;

import java.awt.Graphics;

public class DrawFillRect extends Draw {

	//重写draw抽象类中的draw抽象方法
	public void draw(Graphics g, int x1, int y1, int x2, int y2) {
		//输出信息
		System.out.println("画填充矩形");
		// 调用画填充矩形的方法
		g.fillRect(x1, y1, x2, y2);
		
	}
 
}

  • 大小: 40.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics