Преобразование приложения AWT в SWT / JFace - PullRequest
4 голосов
/ 10 января 2011

В настоящее время я занимаюсь идеей преобразования небольшого / среднего проекта из AWT в SWT, хотя Swing еще не совсем ушел в прошлое. Я думал о преобразовании главного окна в объект моста SWT_AWT, но я понятия не имею, как семантика для этой работы. После этого я планирую обновить диалог для диалога, но не обязательно в течение одного выпуска. Возможно ли это?

Кто-то сделал подобное преобразование и может дать мне несколько советов? Может быть, есть где-нибудь учебник? Может быть, есть даже инструмент, который может автоматизировать некоторые части этого? Я пробовал поискать в Google, но безрезультатно.

Обновление: еще одна вещь: в настоящее время это проект NetBeans. Может помочь или нет, я не знаю.

Ответы [ 4 ]

3 голосов
/ 11 января 2011

Мы делали это довольно много раз. Но только потому, что мы переходим от приложения Swing к приложению Eclipse RCP не потому, что нам нравится возиться с вещами. Этот проект действительно сообщит вам, отделили ли вы свой код контроллера / модели от кода вашего представления.

Одно из предложений - не пытаться преобразовать все сразу. Вы получите кучу смешанного кода, который вообще не работает. Вы можете начать с конвертации порталов. Я бы рассматривал портал как что-либо внутри Tab, Dialog или Window, по сути, автономную единицу. Если у вас есть открывающееся окно, создайте окно в SWT, но сделайте его содержимое существующим AWT / Swing. Это должно быть довольно просто и позволит вам привыкнуть к (я действительно надеюсь, что они не были пьяны и у них были на то веские причины) способу создания и ассоциирования родительского / дочернего контроля.

Одна ошибка, которая может возникнуть, - это прозрачные компоненты. Swing, за исключением «оконного» класса, все визуализируется в Java. Это позволяет очень легко отображать вещи так, как вы хотите. В SWT есть некоторые ограничения:

  • Граница. Если вы используете SWT.BORDER, вы застряли с тем цветом, который использует нативный компонент. Лучше всего использовать PaintListener и визуализировать собственные границы, если вы хотите, чтобы они были в другом стиле или цвете.
  • Прозрачные метки, индикаторы выполнения. Мне не удалось получить ярлыки или индикаторы выполнения с прозрачным фоном. Если вы хотите, чтобы они приобрели родительский цвет или рисунок, вам нужно будет самостоятельно визуализировать текст и другие элементы управления.
  • Управление. В SWT есть композиты и элементы управления. Представьте элементы управления как базовые собственные элементы управления, которые выполняют все вызовы собственного API. Они не могут быть разделены на подклассы, что усложняет задачу.
  • Таблицы доставят вам больше всего хлопот. Убедитесь, что все стабильно, прежде чем пытаться преобразовать JTable в Table или TableViewer. Вы потратите на них некоторое время, особенно если у вас есть собственные редакторы и программы просмотра.

Я не исследовал, почему SWT был спроектирован таким, каким он был. Я предполагаю, что там должна быть веская причина. Было бы здорово, если бы у кого-то был блог или защита его дизайна, поэтому мне не нужно его искать. После публикации я удалю эти строки, поскольку они не имеют отношения к вопросу.

Добавление

Я хочу добавить, что, поскольку у вас уже есть продукт, я полагаю, что он работает. Лучший совет, который я могу вам дать, - никогда не позволять вашему коду переходить в состояние, которое он не может скомпилировать и запустить. Если вы работаете над конверсией и все, что вы регистрируете, всегда запускается и выполняется (несмотря на визуальные различия между SWT / AWT / Swing), вы избавите себя от многих головных болей в долгосрочной перспективе. Худшее, что вы можете сделать, это попытаться решить все это сразу и привести ваш код в нестабильное состояние на несколько недель.

1 голос
/ 10 января 2011

Если вы думаете об использовании сочетания SWT и Swing в одном приложении, эта статья Eclipse Corner будет очень полезна.

1 голос
/ 10 января 2011

Я бы предложил импортировать его в WindowBuilder проект, поскольку WindowBuilder дает вам возможность анализировать существующий код и создавать макет GUI, а затем преобразовывать компоненты в SWT или Swing.

0 голосов
/ 10 января 2011

Мы готовим тот же шаг: качаемся в SWT / JFace.Сначала мы пытаемся определить узкие места: переопределить специальные компоненты, полученные из JComponent, с помощью SWT / JFace, найти замену стыковки JIDE (мы хотим использовать SWT / JFace, а не RCP, чтобы избежать лишних хлопот).Худшее, что мы уже представляем, это то, что в Swing вы можете создавать компоненты и добавлять их позже к родителю.С SWT это невозможно: родительский компонент должен быть передан как ссылка на конструктор дочернего компонента.Это потребует серьезного рефакторинга в приложении Swing перед использованием SWT.

Честно говоря, мы оцениваем конверсию как очень серьезное изменение, поскольку ожидаем, что время, когда ничего не может быть скомпилировано, будет довольно продолжительным.Мы стараемся сократить это время, подготовив все как можно лучше, но посмотрим, насколько хорошо это будет работать.

Обновление от 6 апреля 2011 года:

Мытеперь реорганизовал наше приложение Swing, чтобы всегда создавать компоненты со своими родителями (как в SWT).Наши подклассы JFrame и JDialog были реорганизованы в с a JDialog экземпляром, чтобы упростить переключение на SWT Shell.Параллельно мы переписываем сложные компоненты в SWT.

...