Каков наилучший способ управления экранами приложений в SWT? - PullRequest
4 голосов
/ 20 апреля 2010

Я создаю отдельное настольное приложение SWT, которое имеет около 10 различных экранов (несколько мастеров, справка, формы и т. Д.). Некоторые элементы на экране вообще не меняются (например, заголовок, фон и т. Д.), И есть рабочая область, которая меняется в зависимости от того, что нажимается и т. Д.

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

Кроме того, я не смог найти способ показать / скрыть Composite, мне нужно dispose, а затем создать заново?

Какая лучшая практика? Я новичок в разработке SWT вне Eclipse, поэтому любая помощь будет полезна.

1 Ответ

5 голосов
/ 20 апреля 2010

Решение о том, создавать ли экраны заранее или создавать их в первый раз, когда они должны отображаться, является решением, которое необходимо принимать для каждого приложения. Если есть большая вероятность того, что все экраны понадобятся для использования при конкретном запуске приложения, а количество экранов невелико (10 экранов относительно мало), то вы можете создать их при запуске приложения, чтобы пользовательский интерфейс был snappier после загрузки приложения.

Если вы используете привязки, вам может потребоваться разработать стратегию удаления (даже если вы только распоряжаетесь привязками), чтобы у вас не было слишком большого количества событий, летающих вокруг.

Элемент управления имеет метод setVisible (логический) (а Composite наследуется от элемента управления), который можно использовать для отображения и скрытия компонента. Обратите внимание, что это только предотвратит показ композита на экране, менеджер раскладки все равно выделит для него пустое место. У многих макетов SWT есть способ исключить элемент управления из макета, который избавит от пустого пространства. Например, если вы используете GridLayout, то при скрытии этого элемента управления вы должны установить для переменной GridData значение исключения для вашего объекта GridData.

Другой вариант - использовать StackLayout. Это позволяет вам сложить кучу композитов друг на друга, а затем выбрать, какой из них находится сверху. Это может быть хорошо для вас, если у вас есть статические области плюс рабочая область, как вы описали. Я бы поместил заголовок, нижний колонтитул и пустой композит с StackLayout в файл класса. Затем я бы поместил каждый экран, который будет отображаться в рабочей области, в свои классы. Вы можете использовать эти классы экрана для расширения Composite, а затем настроить себя в конструкторе или использовать фабричный метод для настройки экрана. Либо это обычная и приемлемая практика, которая сводится к вкусу.

...