java图形用户界面用鼠标拖动画图形

目的

  1. 了解Swing基本组件的分类、GUI程序的设计方法;
  2. 熟练运用Swing常用组件和其API开发GUI程序;
  3. 理解布局管理器的概念以及常用布局的特点和使用方法;
  4. 深刻理解并熟练使用AWT事件模型与处理机制。

要求

编写满足以下要求的GUI程序:
在窗口中按下鼠标左键并拖拽,绘制图形(使用适配器类)

运行效果图

  1. 鼠标未点击java图形用户界面用鼠标拖动画图形_第1张图片
  2. 鼠标点击并拖动后java图形用户界面用鼠标拖动画图形_第2张图片

部分源码

/*
	 * 重写mousePressed()和mouseReleased()方法
	 */
	@Override
	public void mousePressed(MouseEvent e) {
     
		g.clearRect(0,0,canvas.getWidth(),canvas.getHeight());//鼠标点击前将画布上的原有图案清除
		showMess.setText("矩形的左上角坐标为:("+e.getX()+","+e.getY()+")");//将坐标显示在标签上
		x1=e.getX();//得到鼠标点击的点坐标
		y1=e.getY();
	}
	@Override
	public void mouseReleased(MouseEvent e) {
     
		x2=e.getX();//得到鼠标松开的点坐标
		y2=e.getY();
		
		/*
		 * 将x1,x2,y1,y2进行比较,判断鼠标绘制方向
		 */
		if(x2>x1&&y2>y1) {
     //如果初始点的横坐标比终止点的横坐标小,并且初始点的纵坐标比终止点的纵坐标小,则鼠标绘制的方向是->右下
			g.drawRect(x1,y1,Math.abs(x2-x1),Math.abs(y2-y1));
			showMess.setText("矩形的左上角坐标为:("+x1+","+y1+"),矩形的宽为:"+Math.abs(x2-x1)+" 高为:"+Math.abs(y2-y1));
		}
		else if(x2>x1&&y2<y1){
     //如果初始点的横坐标比终止点的横坐标小,并且初始点的纵坐标比终止点的纵坐标大,则鼠标绘制的方向是->右上
			g.drawRect(x1,y2,Math.abs(x2-x1),Math.abs(y2-y1));
			showMess.setText("矩形的左上角坐标为:("+x1+","+y2+"),矩形的宽为:"+Math.abs(x2-x1)+" 高为:"+Math.abs(y2-y1));
		}
		else if(x2<x1&&y2>y1){
     //如果初始点的横坐标比终止点的横坐标大,并且初始点的纵坐标比终止点的纵坐标小,则鼠标绘制的方向是->左上
			g.drawRect(x2,y1,Math.abs(x2-x1),Math.abs(y2-y1));
			showMess.setText("矩形的左上角坐标为:("+x2+","+y1+"),矩形的宽为:"+Math.abs(x2-x1)+" 高为:"+Math.abs(y2-y1));
		}
		else{
     //如果初始点的横坐标比终止点的横坐标大,并且初始点的纵坐标比终止点的纵坐标大,则鼠标绘制的方向是->左下
			g.drawRect(x2,y2,Math.abs(x2-x1),Math.abs(y2-y1));
			showMess.setText("矩形的左上角坐标为:("+x2+","+y2+"),矩形的宽为:"+Math.abs(x2-x1)+" 高为:"+Math.abs(y2-y1));
		}
	}

心得

  1. 通过此次试验掌握了Swing常用组件和其API开发GUI程序;
  2. 本实验用在重写mouseReleased()方法时,将四个点坐标进行比较,分类绘制,可以实现鼠标的各个方向都能绘制矩形,否则只能绘制从左上到右下的矩形;
  3. 通过查百度知道Graphics类是用来提供基本的几何图形绘制方法,可以画线段、矩形、圆、椭圆等;利用Graphics对象g可以获取画笔;
  4. 让Exp5_1继承MouseAdapter适配器类,在实现事件监听,重写mousePressed()和mouseReleased()方法时,可以大大提高效率,省略了无用的方法重写。

附加

程序完整源代码请查阅https://download.csdn.net/download/qq_45556665/12657476
需要设计报告的请关注收藏私聊~~

你可能感兴趣的:(源程序,笔记,java,gui)