0

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

4

1 回答 1

1

使用 SWT 创建您自己的小部件一文中:

SWT 事件机制

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

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

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

public void removeSelectionListener(SelectionListener listener) {
    removeListener(SWT.Selection, listener);
}

When the 'selection event' occurs in your widget (say, when child1 is selected), you notify the application's selection listeners using notifyListeners.

child1.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        notifyListeners(SWT.Selection, new Event());
    }
});

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

于 2013-08-12T08:35:16.903 回答