`

我的画图板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;操纵位图的开发包...

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

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

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

    核心的STM32微控制器通过与电源模块、微处理器模块、按键以及液晶显示屏接口的连接,形成了画图板的主体。其中,WK_UP按键负责系统的复位操作,而KEY0和KEY1则用于接收用户的输入指令。TFT-LCD液晶屏则作为用户与...

    易语言模块大全(共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 画图板程序进行详细的分析...

    彩虹画图板软件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