java中的事件处理,对于vb.net专家

Posted

技术标签:

【中文标题】java中的事件处理,对于vb.net专家【英文标题】:Event handling in java, for a vb.net expert 【发布时间】:2012-12-16 10:06:22 【问题描述】:

我发现了大量关于处理现有 java 类的事件的帖子,但没有关于从头开始创建具有事件的类。 这个 vb.net sn-p 的 java 翻译是什么?

Public Class TestClass
    Event TestEvent()
    Sub TestFunction()
        RaiseEvent TestEvent()
    End Sub
End Class
Public Class Form1
    Dim WithEvents TC As New TestClass
    Sub OnTestEvent() Handles TC.TestEvent
    End Sub
End Class

谢谢。

【问题讨论】:

【参考方案1】:

这里有一个关于 Java 事件模型背后的“理论”的很好的链接:

http://docs.oracle.com/javase/1.4.2/docs/guide/awt/1.3/designspec/events.html

这里有一个链接说明如何创建您自己的自定义事件:

http://castever.wordpress.com/2008/07/31/how-to-create-your-own-events-in-java/

这是来自SO的一个非常好的例子:

// REFERENCE: https://***.com/questions/6270132/create-a-custom-event-in-java
import java.util.*;

interface HelloListener 
    public void someoneSaidHello();



class Initiater 
    List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) 
        listeners.add(toAdd);
    

    public void sayHello() 
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    



class Responder implements HelloListener 
    @Override
    public void someoneSaidHello() 
        System.out.println("Hello there...");
    



class Test 
    public static void main(String[] args) 
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();
    

关键是:

1) 创建一个“接口”来定义你的“事件”(例如 AWT 事件模型中的事件)

2) 创建一个“实现”此事件的类(类似于 C 等语言中的“回调”——有效地,VB 会自动为您使用“事件”类型)。

'希望能有所帮助......至少一点点!

【讨论】:

我只想补充一点,事件处理通常使用观察者设计模式来解决。 @paulsm4 为您提供了一个示例。如果你在谷歌上搜索“观察者模式”,你会发现很多关于它的文献。这里还有一个例子:searchdaily.net/observer-pattern-java-example @Paulo Silva - 你是绝对正确的。事实上,上面的例子是明确写成Observer Pattern的例子 谢谢,它有帮助,但是在看了你的回答后,我有另一个问题:是否可以为同一个类的两个实例创建两个不同的侦听器?比如:Sub Obj1OnEvent() Hndles Obj.Event Sub Obj2OnEvent() Hndles Obj.Event

以上是关于java中的事件处理,对于vb.net专家的主要内容,如果未能解决你的问题,请参考以下文章

多个控件的事件处理程序 vb.net

使用VB在ASP.Net中对GridView中的事件进行排序

vb.net 方向键不能触发 keydown 事件

VB.NET如何使控件不能响应KeyDown事件

可以将组件及其事件处理程序复制到新窗体或框架的 Delphi 6 实用程序或 IDE 专家?

VB.NET(WinForms)中带参数的安全线程池队列