Как я могу добавить MouseListener для каждого элемента (кроме одного) внутри EditorPart? - PullRequest
0 голосов
/ 04 марта 2019

Когда пользователь щелкает где-то за пределами текстового виджета, я хочу деактивировать его полосы прокрутки.

Это работает так:

public class RttProjectActionEditor extends EditorPart {
    ...
    MouseListener exitCommandText = new MouseListener() {
        @Override
        public void mouseDoubleClick(MouseEvent e) {}
        @Override
        public void mouseDown(MouseEvent e) {}
        @Override
        public void mouseUp(MouseEvent e) {
            if (e.widget != textArea) {
                textArea.getVerticalBar().setEnabled(false);
            } 
        }
    };

    labelGroup.addMouseListener(exitCommandText);
    myComposite.addMouseListener(exitCommandText);
    ... // all widgets in my EditorPart

Но так я должен добавить их один за другим ко всем виджетам, владельцем которых является этот EditorPart.Есть ли лучший и простой способ?

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете рекурсивно добавить слушателей к элементу управления и любым дочерним элементам (если он составной), используя что-то вроде этого:

private void hookRecursively(Control c, MouseListener listener) {
    c.addMouseListener(listener);

    if (c instanceof Composite) {
        Control[] children = ((Composite) c).getChildren();
        for (Control element : children) {
            hookRecursively(element, listener);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...