`
宝剑锋梅花香
  • 浏览: 6971 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

关于监听器那些让人头疼的事

阅读更多

       本人初学JAVA,对于界面开发我只能说有点蛋疼,用JAVA来做界面的话确实需要一定的耐心(不使用插件,就算使用插件的话也没好多少)既然Java提供了界面开发,老师又要求做,只能硬着头皮上啦。但是监听器还真是个难懂的地方,我是上了几次课才略微搞懂了些。

       今天是说监听器,至于界面怎么写就不说啦。

       首先,监听器是干什么的?Java是事件监听机制,我觉得龙哥对这点有个很形象的说法:就比如我们要监视一间房子中会发生什么事情,就会给这间房子装上一个摄像头。对于事件的处理在Java中有类似的机制。我们要监视一个按钮有没有被点击,就要给按钮装上一个类似监视器的东西。这个东西我们就叫做事件监听器。而监听按钮有没有被点击的这种机制就是事件监听机制。Java当中,每个事件都对应有一个事件监听器。我刚刚开始的时候硬是没有理解监听器的作用,没理解的话就多体会上面一段话。

   其次,监听器是什么?监听器其实就是一系列的接口,说到接口就要想到接口是用来实现的,如果要用它的话,它就需要一个类来实现它的功能,例如:在写一个画图板的时候,要达到在画布的一个像素点上按下鼠标,然后在另一个点松开鼠标的时候会画一条直线的效果,这就需要给这个画布安装一个鼠标监听器了,刚刚说了,监听器是接口,接口需要一个类来实现其功能,所以我们创建一个DrawListener类,来实现MouseListener这个接口。

   然后,监听器接口怎么用?首先要有一个类来实现你所需要的监听器,以写的DrawListener类为例,那么它就要来实现一个鼠标监听器:public class drawListener implements MouseListener{}  然后为里面的功能函数写上需要的代码,比如说,我需要按下鼠标的时候获得该位置的点的坐标,这个方法就应该写在public void mousePressed(MouseEvent e) 这个函数里面。最后,将监听器的函数实现后需要给这个需要监听的对象安装上我们写的这个监听器,那就是绑定监听器,先声明一个所写的监听器类的对象,然后用对应的add函数绑上。

   我们创建的监听器类的构造函数的作用。自己创建了监听器类,那么它的构造函数起到一个传值的作用,把实例化的对象的值传给函数。

   附上画图板监听器的代码:

 

package jhf.draw;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;

public class drawListener implements MouseListener ,MouseMotionListener{
	
	private Graphics g;
	private int x1,x2,y1,y2;
	private ButtonGroup group;
	String command;
	//声明一个动态数组对象来存储shap 然后再遍历出来
	public static ArrayList<shap> shaplist=new ArrayList<shap>();
	/**
	 * drawListener 的构造函数
	 * @param g  一个画布区域
	 * @param group  按钮组
	 */
	public drawListener(Graphics g, ButtonGroup group) 
	{
		this.g = g;
		this.group = group;
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO 自动生成的方法存根
		ButtonModel bm=group.getSelection();
		command=bm.getActionCommand();
		 x1=e.getX();
		 y1=e.getY();
		 
	
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO 自动生成的方法存根
		x2=e.getX();
		y2=e.getY();
		if(command.equals("line"))
		{
			drawLine line =new drawLine(x1,y1,x2,y2);
			line.draw(g);
			shaplist.add(line);
		}
		else if(command.equals("rect"))
		{
			Color color;
			color=Color.RED;
			drawRect rect=new drawRect(x1,y1,x2,y2);
			g.setColor(color);
			rect.draw(g);
			shaplist.add(rect);
		}
		else if(command.equals("oval"))
		{
			Color color;
			color=Color.BLUE;
			drawOval oval=new drawOval(x1,y1,x2,y2);
			oval.draw(g);
			g.setColor(color);
			shaplist.add(oval);
		}
	
	}	
@Override
	public void mouseDragged(MouseEvent e) 
	{
	
	
	 
		if(command.equals("write"))
		{
			g.setColor(Color.green);
			int x3 = e.getX();
			int y3 = e.getY();
			g.drawLine(x1, y1, x3, y3);
			
			x1=x3;
			y1=y3;
		}
		
	}
@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO 自动生成的方法存根
		
	}
@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO 自动生成的方法存根
		
	}
@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO 自动生成的方法存根
		
	}

@Override
    public void mouseMoved(MouseEvent arg0) {
	// TODO 自动生成的方法存根
	
}






}

   画图界面中有关监听器的代码:

 

  //在面板上加上一个用来绘制的面板
   		JPanel drawPanel = new JPanel();
		drawPanel.setPreferredSize(new Dimension(385,500));
		//drawPanel.setBackground(Color.WHITE);
        drawPanel.setUI(ui4);
		center.add(drawPanel);

   		this.setVisible(true);
   		//从绘制面板上获得画布对像
   		//获得绘制面板在屏幕上占据的区域,这块区域允许当前应用绘制图形
   		Graphics g=drawPanel.getGraphics();
   		drawListener dlis=new drawListener(g,group);//创建监听器对象
   		drawPanel.addMouseListener(dlis);//安装鼠标监听器
   		drawPanel.addMouseMotionListener(dlis);

        值得说明的是,创建的类实现了几个监听器接口就要add几次。

 

  

<!--EndFragment-->
2
0
分享到:
评论

相关推荐

    Linux那些事儿之我是Hub

    ### Linux那些事儿之我是Hub —— 深入解析Linux下的USB Hub驱动 #### 引言 《Linux那些事儿之我是Hub》这篇文章以其独特的视角,深入浅出地讲解了Linux系统下USB Hub的工作原理及其与操作系统之间的交互机制。...

    鼠标键盘记录器

    这种工具的主要功能在于捕捉用户输入的信息,包括敲击的按键、点击的位置以及浏览的网页等,以便于事后回放或分析。在【描述】中提到的用途,主要是为了保护个人电脑在无人看管时的安全,防止未经授权的第三人进行...

    高德地图demo事列

    3. **添加标记**:如何在地图上添加一个或多个标记,代表具体地点,并可添加点击事件监听器。 4. **路径规划**:演示如何规划路线,包括起点、终点的设置,以及展示不同出行方式的路线。 5. **地理编码和反编码**:...

    模仿QQ的扩展型很好的ExpandableListView毕业设计—(包含完整源码可运行).zip

    6. 整合:最后,将以上所有元素整合到一个Activity或Fragment中,通过设置Adapter和监听器,让ExpandableListView能够正常工作。 在这个毕业设计的项目中,你将获得一个完整的、可运行的代码示例,这将帮助你深入...

    JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法

    当页面上有父子关系的DOM元素分别绑定了多个事件处理器,且这些事件处理器分别在捕获阶段和冒泡阶段时,其执行顺序可能会让人困惑。因此,理解DOM事件的传播机制以及如何控制事件监听的执行顺序对于进行有效和正确的...

    html编辑器.zip

    这个编辑器特别强调了其界面和操作方式与Excel类似,让用户可以通过拖动和双击来进行布局和文本编辑。下面将详细讨论相关知识点: 1. **HTML(超文本标记语言)**:HTML是网页设计的基础,它定义了网页的结构和内容...

    通过MVC模式将Web视图和逻辑代码分离.doc

    通过合理地组织代码,不仅可以提高代码的可读性和可维护性,还能促进团队协作,让专业的人做专业的事。在实际项目中,可以根据需求选择适当的框架或技术,如React、Angular或Vue.js,它们都提供了实现客户端MVC模式...

    网络术语的通俗讲解,感觉很有用

    **数据窃听(Data Eavesdropping):** “因为小明作贼心虚……”描述了数据窃听的行为,即未经授权监听或截取网络数据包。 **IP地址与MAC地址:** - **IP地址**:在本文档中被比喻为“电话号码”,是用于标识网络...

    javascript犀利的效果100个 你懂得

    2. **事件处理**:事件监听器如`addEventListener`和`removeEventListener`,以及各种事件类型(如点击、鼠标移动、键盘输入等),让开发者可以响应用户行为,实现丰富的交互。 3. **CSS操作**:JavaScript可以直接...

    源代码:网站制作剪刀石头布.rar

    JavaScript可以使用事件监听器来捕捉用户的选择,并调用相应的函数进行逻辑判断。 4. **AJAX**:如果游戏需要实时反馈,可能会使用异步JavaScript和XML技术来更新页面而无需刷新整个页面,提供更好的用户体验。 5....

    java做的简单记事本

    此外,“内附论文”暗示可能还包含了一份关于该程序的设计和实现的技术文档,这对于学习和理解程序的内部工作原理很有帮助。它特别适合学生进行“课程设计”,这通常是一项教育项目,让学生实践编程技能,理解和掌握...

    电工电子课程设计---声光控制节能开关

    要解决这个问题我们可以设计一个类似于‘窃听器’的接收设备专门用来接听声音信号并将声音信号转化为电信号转送到下一级电路。但是作为声控电路对声音信号的要求既不能太强也不能太弱,太强声控难以实现;而太弱电路...

    百灵达X32说明书

    百灵达X32是一款先进的数字混音器,专为专业音响工程师和音乐制作人设计。这款设备结合了高精度的音频处理能力、直观的用户界面和强大的路由灵活性,使其在各种场合,如录音室、现场演出、广播及教堂等应用广泛。与...

    四国军棋界面Swing/AWT的代码

    此外,事件监听器(EventListener)会被添加到按钮上,以便当用户点击棋子时触发相应的行为,如移动棋子、攻击等。 为了处理游戏逻辑,可能需要设计一系列的类,如棋盘类(Board)、棋子类(Chessman)、玩家类...

    GRE分类词汇总结

    - **bug** (n.):臭虫,窃听器,此处指不受欢迎的小生物或干扰设备。 - **fetid** (adj.):(水等)有恶臭的,形容有强烈难闻气味的事物。 - **flagrant** (adj.):臭的,恶名昭彰的,形容明显且令人不悦的。 - ...

    Android技术面试整理-葵花宝典

    它可以监听各种类型的事件,包括系统级的通知、应用间的通信等。当接收到相应的Intent时,BroadcastReceiver会执行相应的处理逻辑,并可以选择是否将消息传递给其他接收者。这种方式统一了Android中的事件传播机制,...

    极优秀的安卓手机文字离线朗读软件1.3.7版(可自动朗读复制的几万个以上的中英文字,可背景朗读,调节朗读进度、次数)

    支持背景播放,手机干别的事时不耽误朗读。本软件有“文字复制监听服务”功能,在手机上可以设置成在复制文字后就马上自动朗读;有进度条,可以调节朗读进度;可以设置任意次数的重复阅读;有十几种发音人可供选择,...

    Java推荐经典书籍

    《Java Web开发实战》详细介绍了如何使用Java进行Web应用开发,包括Servlet、JSP、过滤器、监听器、MVC框架等内容。书中结合实际案例,讲解了Web开发的全过程,适合想要从事Web开发的Java学习者。 ### 9. 《Java与...

    直播时点屏幕出现星星的效果

    "DMHeartFlyAnimation-master"这个文件名可能表示这是一个关于实现这种效果的代码库或者项目,特别是针对点选屏幕时触发的心形或星星飞舞的动画。 首先,我们要理解这种效果的技术实现。在iOS和Android平台上,...

Global site tag (gtag.js) - Google Analytics