#java #swt
#java #swt
Вопрос:
Когда пользователь щелкает где-то за пределами текстового виджета, я хочу деактивировать его полосы прокрутки.
Это работает следующим образом:
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:
Вы можете рекурсивно добавлять слушателей к элементу управления и любым дочерним элементам (если это составной элемент), используя что-то вроде этого:
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);
}
}
}