`
宝剑锋梅花香
  • 浏览: 6739 次
  • 性别: 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
分享到:
评论

相关推荐

    校园监控系统集成规划设计网络综合布线

    6.在餐厅、运动场设立监控点、监听头和报警器,这些地方的人流量都比较大,管理人员通过监控副控可随时掌握现场情况; 7.根据学院的具体情况在一些特殊的位置设立监控点、监听头、报警器和副控点,完善学院的技防...

    智能安防—报警控制器.pptx

    报警控制器;;1. 基本介绍;...无论何种情况,若要对报警控制器按键进行功能设置或撤销,都必须先输人有效密码,以识别操作人员的身份与权限。 ;内置可充备用电源 备用电源可用24h。 ;3. 主机主要技术指标;

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

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

    bill-acceptor:Akka 演员通过 rs-232 串行连接与票据接受者进行通信

    票据接收器 RS-232 库使用与帐单接收器进行通信,... Listen命令Listen : 监听串口并轮询票据接收器UnListen : 停止监听串口禁止:接受所有账单UnInhibit : 不接受账单Stack : 在托管中接受账单退货:不接受托管账单事

    turtl「Turtl」-crx插件

    这样,即使NSA窃听了您的Internet连接,即使有大批雇佣兵闯入了我们的数据中心并窃取了我们的硬盘驱动器,您的数据也是包括我们在内的每个人都不可读的。因为这不是你的事,而是你的事。 支持语言:English (United ...

    Turtl-crx插件

    语言:English (United ...这样,即使NSA窃听了您的Internet连接,即使有大批雇佣兵闯入了我们的数据中心并窃取了我们的硬盘驱动器,您的数据也是包括我们在内的每个人都不可读的。 因为这不是你的事,而是你的事。

    智能小区报警系统方案设计.doc

    用户通过无线遥控器设置主机的状态: 有人在家时,可设置门钟状态。如有人进入触发传感器,主机发出门钟声,此时不拔号 ;也可设置为在家周边防范状态,此时主机只接收门窗等周边传感器信号。室内传感器 处于非工作...

    凌波多媒体电子教室

    声音监听:让教师或某个学生对某组或全体学生进行监听; 网络复读:利用现有音频、视频文件作为教材,对学生进行网路复读,跟读训练; 影音广播:让教师或某个学生对某组或全体学生进行影音文件广播; 屏幕录像:...

    Java计算器实验报告(1).doc

    事 件监听和处理通过实现addActioListener监视器接口和ItemEvent事件接口,从而对每一 个按钮实现事件的监听和处理;计算方面,调用ScriptEngineManager和ScriptEngine两 个类,直接通过eval函数直接把输入文本当作...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    eas供应链dep案例集

    2. 增加监听器处理。成本对象选择后,同步更新成本对象名称列 " 0.5 新增及调整字段 EASSCMA1P0008 销售订单中增加“库位”字段 销售订单分录中增加“库位”字段。 1、 销售订单分录增加库位字段 0.5 新增及调整...

    最新网络安全课后习题.doc

    全盘恢复、个别文件恢复 三 选择题 1 入侵者通过观察网络线路上的信息,而不干扰信息的正常流动,如搭线窃听或非授权地 阅读信息,这事属于()。A A 被动攻击 B 主动攻击 C 无意威胁 D 系统缺陷 2 入侵者对传书中的...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的...

Global site tag (gtag.js) - Google Analytics