В Общих параметрах можно указать, должны ли объекты панелей открываться по одинарному или двойному щелчку мыши.
Почему этот параметр может работать не во всех панелях? Потому, что панели, добавленные модулями, должны явно поддерживать это свойство.
Вспомним, что панель может быть реализована за счет создания управляющих элементов SWT и написания стандартного кода SWT, или используя программы просмотра JFace для обработки эффектов низкого уровня. Открытие по одинарному щелчку может быть реализовано на любом уровне. Большинство панелей, открывающих другие объекты, отображают их в структурированном виде, например в списке. Пока что рассмотрим панели такого типа. Если панель отображает объекты в другом виде, для поддержки открытия по одиночному щелчку лучше использовать концепции SWT-уровня.
При использовании программ просмотра JFace со списками объектов, поддержка открытия объекта одинарным щелчком осуществляется просто. Вместо addDoubleClickListener для открытия объектов в панели используйте addOpenListener. Получатель запросов открытия учитывает текущие свойства рабочей среды и открывает объекты в ответ на заданное действие мышью.
addDoubleClickListener можно применять для действий, не связанных с открытием, например для развертывания объекта в дереве при двойном щелчке.
JFace предоставляет служебный класс OpenStrategy для обработки одиночных и двойных щелчков мыши на уровне управления SWT. OpenStrategy настраивается в окне Общие параметры, поэтому он учитывает текущие настройки свойства открытия объектов рабочей среды. На самом деле, программы просмотра JFace используют этот класс для реализации получателя запросов открытия.
Необходимо создать OpenStrategy и связать его с управляющим элементом SWT. OpenStrategy перехватывает определенные события и обрабатывает их согласно параметрам среды. Ваша задача состоит в том, чтобы добавить получатель запросов открытия к стратегии, реализующей код для открытия. Таким образом, даже не нужно знать, какой управляющий элемент запускает открытие документа.
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // код для обработки открытия. ... } }
Другие параметры рабочей среды (выбрать при наведении указателя мыши, открыть, используя клавиши со стрелками) также обрабатываются OpenStrategy. Это означает, что "все будет хорошо", если вы используете программы просмотра JFace или класс OpenStrategy для указания параметров открытия.
При обработке события открытия следует использовать OpenStrategy.activateOnOpen() для определения, следует ли активировать по умолчанию открытый редактор. Активация редактора делает текущим не панель, а редактор, что может быть нежелательно при открытии объектов одним щелчком.