2010-04-20 1 views
4

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

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

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

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

ответ

5

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

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

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

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

+0

Отличный ответ. Спасибо! – parxier

+0

Я мог найти только 'java.awt.CardLayout'. Разве это не входит в стандартный набор SWT-класса? – parxier

+1

Извините, моя ошибка, это StackLayout в SWT. – rancidfishbreath