`

我的画图板1.0<细说2.正文,画图板的主体与监听器>

阅读更多
(Second):画图板的创建与监听器的实现
1.画图板的建立方法,都是基本的
(这里我是直接拷贝我的源代码的一部分,有些语句有点点问题,比如说:JButton应该写成javax.swing.JButton。但在源代码中有了引用,所以我就直接省略了,你可以在我的文章《一个可以重绘的画图板》程序中看到源代码)
 
          /**
	 *生成 画板的方法
	 */
	public void CreatBox(){
		//设置名称
		this.setTitle("画图板");
		//设置大小
		this.setSize(700,500);
		//布局
		FlowLayout fl=new FlowLayout();
		this.setLayout(fl);
		
		//添加组件
		JButton jb1=new JButton("直线");
		jb1.setActionCommand("line");
		this.add(jb1);
		
		JButton jb2=new JButton("矩形");
		jb2.setActionCommand("rect" );
		this.add(jb2);
		
		JButton jb3=new JButton("椭圆");
		jb3.setActionCommand("oval" );
		this.add(jb3);
		
		JButton jb4=new JButton("三角形");
		jb4.setActionCommand("triangle" );
		this.add(jb4);
		
		JButton jb5=new JButton("多边形");
		jb5.setActionCommand("polygon" );
		this.add(jb5);
		
		
		//设置可见性
		this.setVisible(true);
		//设置默认关闭按钮
		this.setDefaultCloseOperation(3);
		
		//得到这个画布
		gp=this.getGraphics();
		
		/**
		 * 创建监听器
		 * 1:鼠标监听器;
		 * 2:动作监听器;
		 */
		DrawListener dw=new DrawListener(gp);
		//给画布添加鼠标监听器
		this.addMouseListener(dw);
		//给按钮添加动作监听器
		jb1.addActionListener(dw);
		jb2.addActionListener(dw);
		jb3.addActionListener(dw);
		jb4.addActionListener(dw);
		jb5.addActionListener(dw);
	}

2.创立一个监听器,既是鼠标监听器又是事件监听器
如下:
public class DrawListener implements java.awt.event.ActionListener,java.awt.event.MouseListener{}


程序如下:

	//重写构造器
	public DrawListener(Graphics gp){
		this.gp=gp;
	}

	/*********************************鼠标监听器********************************/
	public void mouseClicked(MouseEvent e) {
 	    if(i==3&&"polygon".equals(str)){
 	    	counter=0;
 	    	x2=e.getX();
 	    	y2=e.getY();
 	    	
 	    	gp.drawLine(x1, y1, x2, y2);
	    	gp.drawLine(tempX, tempY, x2, y2);
 	    }
	}
	public void mousePressed(MouseEvent e) {
		//按下鼠标得到鼠标坐标点
		if(!"triangle".equals(str)&&!"polygon".equals(str)){
		x1=e.getX();
		y1=e.getY();
		}
	}
	public void mouseReleased(MouseEvent e) {
		//松开鼠标得到鼠标坐标点
		if(!"triangle".equals(str)&&!"polygon".equals(str)){
		x2=e.getX();
		y2=e.getY();
		}
		//画直线
		if("line".equals(str)){
			gp.drawLine(x1, y1, x2, y2);
		}
		//画矩形
		if("rect".equals(str)){
			if(x1<x2&&y1<y2){
				gp.drawRect(x1, y1, x2-x1, y2-y1);
			}
			if(x1>x2&&y1<y2){
				gp.drawRect(x2, y1, x1-x2, y2-y1);
			}
			if(x1>x2&&y1>y2){
				gp.drawRect(x2, y2, x1-x2, y1-y2);
			}
			if(x1<x2&&y1>y2){
				gp.drawRect(x1, y2, x2-x1, y1-y2);
			}
		}
		//画椭圆
		if("oval".equals(str)){
			if(x1<x2&&y1<y2){
				gp.drawOval(x1, y1, x2-x1, y2-y1);
			}
			if(x1>x2&&y1<y2){
				gp.drawOval(x2, y1, x1-x2, y2-y1);
			}
			if(x1>x2&&y1>y2){
				gp.drawOval(x2, y2, x1-x2, y1-y2);
			}
			if(x1<x2&&y1>y2){
				gp.drawOval(x1, y2, x2-x1, y1-y2);
			}
		}
		//画三角形
		if("triangle".equals(str)){

			if(counter==0){
				x1=e.getX();
				y1=e.getY();
				tempX=x1;
				tempY=y1;
				counter++;
			}
			else if(counter==1){
				x2=e.getX();
				y2=e.getY();
				gp.drawLine(x1, y1, x2,y2);
				counter++;
			}
			else if(counter==2){
				x1=e.getX();
				y1=e.getY();
				gp.drawLine(x1, y1, x2, y2);
				gp.drawLine(x1, y1, tempX,tempY);
				counter=0;
			}
			
		}
		//多边形
		if("polygon".equals(str)){
	    
			if(counter==0){
				x1=e.getX();
				y1=e.getY();
				counter++;
			}
			else if(counter==1){
				x2=e.getX();
				y2=e.getY();
				gp.drawLine(x1, y1, x2, y2);
				tempX=x2;
				tempY=y2;
				counter++;
			}
			else  if(counter!=0&&counter!=1){
				x2=e.getX();
				y2=e.getY();
				gp.drawLine(x2, y2, tempX, tempY);
				tempX=x2;
				tempY=y2;
			}
		}
	}
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	/*********************************动作监听器********************************/
	public void actionPerformed(ActionEvent e) {
		str=e.getActionCommand();
	}

}
说明:
1.计数器counter
在出现多条直线的时候用到它,这个还是很方便的,不会的同学们多多看看这个counter在三角形Triangle及多边形Polygon中的使用
2.生成图形
直线,矩形,椭圆与三角形都是没有什么问题,都是用鼠标左键松开的时候就画了。主要是多边形,我用的方法是点击了鼠标右键之后,会自动将所画的直线自动连接上。
3.不能保存图形
用这两个类所建立的画图有个问题,就是当你的窗体发生改变时,比如说,最小化到任务栏,或者被你拖动后桌面的边缘看不到了等等,你所画的图形都是消失,ok,不要着急。接着看我后面的详解
分享到:
评论

相关推荐

    我的画图板1.0<细说1.准备工作,自定义队列>

    标题中的“我的画图板1.0&lt;细说1.准备工作,自定义队列&gt;”表明这是一个关于软件开发的项目,特别提到了“准备工作”和“自定义队列”。这通常意味着开发者在创建一个名为“我的画图板1.0”的应用程序时,正在为其基础...

    java JDK5.0 实例开发宝典

    类型基本操作&lt;br&gt;2. 面向对象的操作 适配器模式 单列模式 工程模式 组合模式。。。&lt;br&gt;3. 精确计算数字和随机数字&lt;br&gt;4. java.util.package高级使用 List Set collection..&lt;br&gt;5. String高级操作 包括密码的使用 ...

    我的画图板1.0

    "我的画图板1.0" 是一个简单的图形绘制应用程序,允许用户在屏幕上进行自由绘画并重新编辑他们的作品。这个程序作为一个工具,旨在提供基本的绘图功能,适合初学者或者那些想要快速进行简单图形创作的用户。源码的...

    canvas 画图板.zip

    &lt;title&gt;Canvas 画图板&lt;/title&gt; &lt;link rel="stylesheet" href="css/style.css"&gt; &lt;/head&gt; &lt;body&gt; &lt;canvas id="drawCanvas"&gt;&lt;/canvas&gt; &lt;script src="js/draw.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt; ``` 这里的 `canvas` ...

    LambdaProbe 中文包下载

    &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;System monitoring 系统监控 &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;Memory monitoring 内存监控 &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;Cluster information 集群信息 &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;Log file tailing 实时追踪log文件 &lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br...

    Visual C++ 编程资源大全(源码 图形)

    aaplay10.zip&lt;br&gt;Autodesk Animator's FLI player(53KB)&lt;END&gt;&lt;br&gt;46,a2r103.zip&lt;br&gt;转换ANSI 屏幕到RIP格式(17KB)&lt;END&gt;&lt;br&gt;47,show204.zip&lt;br&gt;GIF/PCX/JPEG 观察器(252KB)&lt;END&gt;&lt;br&gt;48,bmp.zip&lt;br&gt;操纵位图的开发包...

    画图板 代码 画图板 代码 画图板 代码

    画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...

    易语言模块大全(共775个模块)

    窗口外形任我设(1.0).zip 窗口热键(1.0).zip 窗口贴边隐藏(1.0).zip 窗口透明模块(1.0).zip 超文本浏览框功能扩展模块(1.2).zip 超级信息框(1.0).zip 超级列表框补助模块(1.0).zip 超级列表框列宽尺寸自动调整(1.0)....

    易语言700模块打包

    窗口外形任我设(1.0).zip 窗口热键(1.0).zip 窗口贴边隐藏(1.0).zip 窗口透明模块(1.0).zip 超文本浏览框功能扩展模块(1.2).zip 超级信息框(1.0).zip 超级列表框补助模块(1.0).zip 超级列表框列宽尺寸自动...

    gsDXFWriter.dll控件

    &lt;br&gt;&lt;br&gt; gsDXFWriter.dll控件的示意图如下: &lt;br&gt;&lt;br&gt; &lt;img src=DownloadFilesimage_activeximagesgsdxfwriter_dll.gif&gt;&lt;br&gt;&lt;br&gt; gsDXFWriter.dll控件的主要特点如下: 图画对象:线,点,圆,椭圆,文本,折线,弧...

    js结合canvas制作的画图板实例.zip

    &lt;title&gt;画图板&lt;/title&gt; &lt;link rel="stylesheet" href="styles.css"&gt; &lt;/head&gt; &lt;body&gt; &lt;canvas id="paint-canvas"&gt;&lt;/canvas&gt; &lt;!-- 其他交互元素 --&gt; &lt;script src="https://code.jquery.com/jquery-3.6.0.min.js"&gt;...

    java 画图板 windows画图板简单实现

    通过这个简单的Java画图板项目,初学者可以了解到GUI编程的基本原理,事件监听器的使用,以及如何利用Java的绘图功能来创建动态的用户交互界面。同时,这也是一个良好的起点,可以进一步扩展功能,如添加更多的绘图...

    画图板,window画图板

    《Windows画图板:探索动态画图的魅力》 Windows画图板,作为一款简单易用的图形编辑软件,是微软操作系统内置的一个基础工具,尤其适合初学者和儿童进行简单的绘图活动。它提供了丰富的基本画图功能,让用户能够...

    java画图板程序代码

    Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...

    (2021-2022年)专题资料完美版基于触摸屏的画图板的设计与实现.ppt

    标题中的"(2021-2022年)专题资料完美版基于触摸屏的画图板的设计与实现.ppt"表明这是一个关于使用触摸屏技术设计和实现画图板的教育资料,时间跨度为2021年至2022年。这份资料可能是针对电子工程或相关专业的学生,...

    彩虹画图板软件vb代码例题.txt

    彩虹画图板软件vb代码例题

    画画板工具画图工具v1.0绿色免费版

    【画画板工具画图工具v1.0绿色免费版】是一款专为用户设计的图形图像处理软件,类似于操作系统自带的画图程序,但它在功能上有所增强,为用户提供更为丰富的绘画体验。这款软件的主要特点包括功能强大且操作简便,...

    画图板STM32F103ZET6.zip

    2. **精英板**:正点原子的精英板是一种用于STM32开发的电路板,具有丰富的扩展接口和预装的调试器,方便开发者进行硬件原型设计和软件开发。在这个项目中,精英板提供了必要的硬件平台,连接了STM32F103ZET6与2.4寸...

    MATLAB GUI实现动态画图曲线的源程序代码.rar

    MATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源程序代码.rarMATLAB GUI实现动态画图曲线的源...

Global site tag (gtag.js) - Google Analytics