如何在EditorPart中的每个元素(一个除外)中添加MouseListener?

问题描述 投票:0回答:1

当用户单击Text小部件之外的某个位置时,我想停用其滚动条。

它的工作原理如下:

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所有的小部件中。有更好更简单的方法吗?

java swt
1个回答
1
投票

您可以使用以下内容递归地向控件和任何子项(如果它是复合体)添加侦听器:

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);
        }
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.