`
小篮子java的家
  • 浏览: 32083 次
  • 性别: 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
分享到:
评论

相关推荐

    e语言-易语言利用画板实现自绘列表

    在“e语言-易语言利用画板实现自绘列表”这个主题中,我们将深入探讨如何使用易语言的画板组件来创建自定义的列表显示功能。 画板组件是易语言提供的一种图形用户界面(GUI)元素,它允许程序员进行自由的图形绘制...

    Flex画板实现~

    Flex画板实现主要涉及到的是Adobe Flex技术,这是一种用于构建富互联网应用程序(RIA)的开源框架。Flex使用MXML和ActionScript编程语言,基于Flash Player或Adobe AIR运行时环境,能够创建交互性强、视觉效果丰富的...

    火山安卓高级画板实现画板开发源码.rar

    火山安卓高级画板实现画板开发源码

    vc简单画板实现

    这个“vc简单画板实现”项目通常会涵盖以下几个核心知识点: 1. MFC(Microsoft Foundation Classes)库:VC++中的MFC是一个C++类库,用于简化Windows应用程序的开发。在这个项目中,我们会用到MFC提供的窗口类...

    通过画板实现标签透明源码

    这个案例中的"通过画板实现标签透明源码"就是一个典型的例子,它涉及到图形用户界面(GUI)设计和编程技术。易语言作为中国本土的一种简单易学的编程语言,被广泛用于教学和小型项目开发。SanYe,可能是资源的作者或...

    fps表与画板实现完美打印预览

    标题中的“fps表与画板实现完美打印预览”指的是在VB.NET环境下,利用特定的控件和方法来实现高质量的打印预览功能。FPS(Frames Per Second)在这里可能是指一种用于显示数据表格的控件,它能有效地展示数据并支持...

    易语言画板实现圆形按纽源码

    标题提到的“易语言画板实现圆形按纽源码”,就是一种利用易语言创建图形界面时,通过自定义画板控件来实现圆形按钮的方法。 在易语言中,通常可以使用“画板”控件配合“画图”命令来绘制自定义图形。画板控件提供...

    易语言用画板实现画数字雨源码

    在这个“易语言用画板实现画数字雨源码”项目中,我们探讨的是如何使用易语言的画板组件来创建一个动态的数字雨效果。这种效果常见于各种数字时钟或艺术展示,数字不断滚动下落,给人一种动态和科技感。 在易语言中...

    易语言画板实现简单的验证码

    易语言画板实现简单的验证码。@风间琉璃。

    易语言画板实现图片浏览效果源码

    在这个“易语言画板实现图片浏览效果源码”项目中,我们可以深入探讨如何使用易语言来创建一个具备图片浏览功能的画板应用。 首先,我们要理解易语言的基本语法和结构。易语言采用的是“汉字编程”,即用汉语词汇来...

    易语言画板实现万花尺源码

    在这个“易语言画板实现万花尺源码”项目中,开发者“没有翅膀de鱼”提供了一个利用易语言编写的程序,该程序能够在画板上模拟万花尺的效果。 万花尺,又称分形花,是一种通过旋转和组合小圆来创建复杂图案的工具。...

    易语言画板实现炸弹人小游戏源码

    在这个“易语言画板实现炸弹人小游戏源码”项目中,我们可以深入理解易语言如何应用于游戏开发,特别是经典的小游戏——炸弹人。 炸弹人游戏是一款早期流行的动作冒险游戏,玩家控制的角色可以放置炸弹来炸毁障碍物...

    简单画板实现

    在IT领域,"简单画板实现"通常是指创建一个用户界面,允许用户通过鼠标或触控设备进行绘图。这个项目可能是一个基本的图形用户界面应用程序,模仿了计算机操作系统中常见的"画板"工具,如Windows的“画图”程序。...

    画板实现炸弹人小游戏-易语言.zip

    《画板实现炸弹人小游戏-易语言》是一个教学资源,主要介绍了如何使用易语言编程工具来设计和开发一款类似于经典游戏“炸弹人”的小型游戏。易语言是一种面向对象的、适合初学者的中文编程语言,它以简洁明了的语法...

Global site tag (gtag.js) - Google Analytics