Java 如何将侦听器添加到自定义控件?

Java 如何将侦听器添加到自定义控件?,java,swt,Java,Swt,我想在我的自定义控件中添加一个选择侦听器,该控件包含很少的按钮,因此每当单击按钮时,控件都应该执行特定的功能。问题是:我想将侦听器添加到控件本身,而不是单独添加到它的每个子按钮。我该怎么办?来自文章: SWT事件机制 SWT提供了一种低级侦听器机制以及常见的Java“类型化”侦听器。每个SWT小部件都理解addListener(int-eventType,Listener-Listener)和NotifyListener(int-eventType,Event-Event)。eventType常

我想在我的自定义控件中添加一个选择侦听器,该控件包含很少的按钮,因此每当单击按钮时,控件都应该执行特定的功能。问题是:我想将侦听器添加到控件本身,而不是单独添加到它的每个子按钮。我该怎么办?

来自文章:

SWT事件机制

SWT提供了一种低级侦听器机制以及常见的Java“类型化”侦听器。每个SWT小部件都理解addListener(int-eventType,Listener-Listener)和NotifyListener(int-eventType,Event-Event)。eventType常量在SWT类中定义。当事件发生时,小部件创建一个包含适当类型常量的SWT事件对象。notifyListeners方法为侦听器调用handleEvent(事件)。如果需要重用现有SWT事件,通常会使用此机制

例如,如果您的小部件实现了一个选择事件,您可以实现“类型化”的添加和删除方法,如下所示:

public void addSelectionListener(SelectionListener listener) {
    addListener(SWT.Selection, new TypedListener(listener));
}

public void removeSelectionListener(SelectionListener listener) {
    removeListener(SWT.Selection, listener);
}
当小部件中发生“选择事件”时(例如,当选择child1时),您可以使用notifyListeners通知应用程序的选择侦听器

child1.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        notifyListeners(SWT.Selection, new Event());
    }
});
请注意,当我们添加侦听器时,我们首先将其包装在TypedListener中。这是因为TypedListener的handleEvent(事件事件)方法根据事件中的类型创建适当的TypedEvent子类,然后为类型化事件调用适当的方法。通过这种方式,应用程序可以向小部件添加Java类型的侦听器,但小部件实现可以使用更高效的低级侦听器机制。但是,请确保您的小部件实现提供了类型化侦听器API。应用程序不应调用低级侦听器方法。类型化侦听器方法可以防止意外的编程错误,例如假设所有小部件都可以处理所有类型的事件,或者事件类中的所有字段对所有事件都有效


如果控件本身是面板或框架,则可以将侦听器添加到其中。@Paniz我使用的是SWT,因此基本上我的自定义控件是复合控件