首页 > 编程知识 正文

分布式事务实现,简述事件驱动的原理

时间:2023-05-05 23:23:33 阅读:142001 作者:3087

每个软件从业人员都可能有一个从学习控制台APP应用到学习可视化编程的过程。 控制台APP的优点是可以很容易地练习某种语言的语法和开发习惯(.net和java等),可视化编程学习可以非常容易地开发各种人机界面(HMI )。 可视化编程可能成为初学者开始对软件感兴趣的契机,也可能成为软件学习的里程碑。 这是因为,可以使用集成设备(ide )将各种组件(如常规按钮、单选按钮和单选按钮)拖放到现成的界面窗口中放下式开发方法不仅方便,而且窗口能很快出现在我们面前,对软件初学者来说可能是一件非常有成就感的事情。

但是,许多软件学习者在学习可视化编程的过程中,可能只是对可视化编程有非常表面的了解,认为通过拖放就能完成一个界面是非常值得称赞的。 在我两年的教育过程中,我深深地感受到了这一点。 因此,下面结合我的教学经验介绍可视化编程中最重要的“事件驱动模型”。

1 .什么是事件驱动模型?

在讨论事件驱动模型之前,我们先看一下事件驱动模型的三个主要元素。

n事件源:可以接收外部事件的源。

侦听器:可以接收来自事件源的通知的对象。

n事件处理程序:用于处理事件的对象。

学员应了解基于事件驱动模型的开发技术包括这三个要素。 net、java技术以及以前使用的Visual Basic和Delphi语言都有基于这三个元素的事件驱动模型开发过程。

现在我们来看看生活的例子。 假设有一天你走在路上不小心撞到了从天上掉下来的花瓶,醉死了。 整个过程实际上是事件处理过程,可以非常简单地分析前面提到的事件驱动模型的三个要素。

1 .昏厥的这个人其实是事件的源头,因为他是可以接受外部事件的源头。

2 .听者是那个人的脑神经。 因为感到疼痛。

3 .案件的处理是此人晕倒身亡。

事件驱动模型在我们的日常生活中无处不在,所以Java和其他编程语言将该过程应用到了可视化编程中。

2.Java编程语言中的事件驱动模型

在Java编程技术中,最常用的可视化编程是Java Swing技术,Java Swing为开发者提供了许多现成的组件,如按钮(JButton )和单选按钮。 要管理用户与构成程序图形用户界面的组件之间的交互,必须了解如何在Java中处理事件。

假设用户单击了程序图形用户界面中的按钮。 实际上,此按钮是此事件的源(可能触发事件的物体)。 因为所有Java Swing对象都具有感知自己正在被操作的能力,所以JButton按钮也具有这样的能力。 事件通常需要源对象。 这里就是JButton对象。 当您按一下按钮时,JButton组件类别会产生一个ActionEvent物件,其中包含事件参数,其中包含事件和事件来源资讯。 该机制如图1-1所示。

图1-1

当JButton识别出自己被单击时,它会将这种感觉传递给预通知对此类事件感兴趣的侦听器对象。 侦听器对象只是侦听特定事件的对象。 这里的“将事件传递给侦听器”仅意味着事件源调用侦听器对象中的特定方法,并以事件对象作为实参。 侦听器对象可以监视特定对象(如按钮)的事件。

实际上,只要实现了侦听器接口,任何类的对象都可以是侦听器对象。 您可以看到有各种各样的侦听器接口来满足不同类型事件的需要。 在此单击按钮示例中,必须实现ActionListener接口才能接收按钮事件。 侦听器接口声明的方法实现了接受此事件对象并响应该事件的代码。 在本示例中,当事件发生时,调用了ActionListener接口的actionPerformed ()方法。 每个侦听器接口都定义了用于接收侦听器处理的事件的特定方法。

仅实现侦听器接口还不足以将侦听器对象连接到事件源,而且必须连接到处理侦听器的事件的单个源或多个源。 可以通过调用事件源对象的特定方法来注册具有事件源的侦听器对象。 例如,要注册侦听单击按钮的事件的侦听器,必须调用绑定侦听器对象和事件源的JButton对象的addActionListener ()方法。

每个事件只响应对该事件感兴趣的侦听器。 实际上,侦听器可以在任何位置接收和处理事件,因为侦听器只需要实现一个合适的接口。 在Java中使用侦听器对象处理事件的方法称为代理事件模型。 这是因为像按钮这样的组件对事件的响应要求独立的侦听器对象来处理,而不是由引发事件的对象自己来处理。 刚才的actionPerformed (现在,让我们来看看JButton如何将用户的单击转换为方法并处理它们(图1-2 )。

图1-2

JButton组件初始化代码片段:

私有视频initiali

ze() {

frame=newJFrame();

frame.getContentPane ().setLayout (null);

frame.setBounds (100, 100, 247, 165);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setTitle ("事件驱动程序");

//btnPress就是这次点击操作中的事件源

btnPress=newJButton();

btnPress.setText ("Press");

btnPress.setName ("Press");

btnPress.setBounds (63, 98, 99, 23);

//向事件源btnPress植入侦听器对象ButtonEventHandler

btnPress.addActionListener (newButtonEventHandler(this));

frame.getContentPane ().add(btnPress);

frame.getContentPane ().add(txtMessage);

}

侦听器创建的代码片断:

//侦听器对象ButtonEventHandler(用来侦听按钮的点击操作)

classButtonEventHandlerimplementsActionListener {

//窗体对象

privateEventDemoform=null;

//通过构造体传入窗体对象,

//作用在于让侦听器对象明白事件源处于

//哪个窗体容器中

publicButtonEventHandler(EventDemo form) {

this.form= form;

}

//委托方法

publicvoidactionPerformed(ActionEvent e) {

//该方法将会把事件的处理权交给窗体容器类的

//btnPress_Click方法处理。

this.form.btnPress_Click(e);

}

}

真正的事件处理代码片断:

/**

*按钮btnPress的事件处理方法。

*

*@parame事件参数

*/

privatevoidbtnPress_Click(ActionEvent e) {

String message ="你点击的按钮名叫:"

+ ((JButton) e.getSource()).getName();

this.txtMessage.setText(message);

}

按钮的事件处理程序代码片断:

代码工作原理:

JButton组件初始化代码片断已经明确阐述了按钮被创建后放置于窗体上,关键在于本代码片断的以下语句:

btnPress.addActionListener(newButtonEventHandler(this));

该语句就是向事件源植入了侦听器对象ButtonEventHandler,该类实现了ActionListener结构,因此JButton类的对象btnPress这个时候已经具有了处理用户点击按钮的能力了。

当用户点击btnPress这个按钮的时候,按钮对象会直接把这次点击感觉传递给ButtonEventHandler的actionPerformed方法处理,为养成较好的编程习惯,我们中心并不建议学员直接在该委托方法中编写代码,而是需要将该事件处理再次转发给窗体中的某个方法来处理,这个方法的命名也必须是有规则的,就是事件源名+下划线+事件名(btnPress_Click),并且该方法必须具有事件参数ActionEvent,因为在该对象中明确指明了,哪个按钮受到了点击了。e.getSource()方法返回了被点击按钮的对象,由于这次被点击的是一个按钮,因此我们需要使用JButton对e.getSource()的返回值进行强转,随后通过getName()方法得到这个按钮的名字。至此整个点击事件处理完了。

这篇文章主要的作用是为了阐述Java的事件处理机制,至于侦听器和事件源的内部工作原理,将会在我的下一篇技术文章《Java的观察者模式》中详细讲解,待续……

上海Softworks软件人才培训中心

电话:021-53086530    53086531

地址:上海市北京东路668号科技京城东楼9楼E座

网址:www.softworks.cn

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1629615

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。