Насколько GWT поддерживает менеджеров компоновки Java?
Кажется, это вопрос, где ответ неявен, поэтому я не могу найти ничего явного.
Поддерживает ли Google Web Toolkit только настраиваемые менеджеры компоновки или подмножество диспетчеров компоновки Java?
Например, возможно ли взять приложение Java Swing с использованием GroupLayout и заставить его работать с GWT?
4 ответа
Поддержка макета GWT осуществляется через подклассы Panel. Некоторые из них, такие как DockPanel, ведут себя немного как макеты Swing (BorderLayout), но вы никогда не сможете взять код Swing и скомпилировать его в GWT.
Это распространенное заблуждение, когда дело доходит до GWT. Он написан на Java исключительно потому, что Java имеет статический тип и широко поддерживается редакторами мирового класса. Тот факт, что он написан на Java, не имеет никакого отношения к желанию команды GWT разрешить вам переносить SWT/AWT/Swing на GWT. Сеть - это другая среда для рабочего стола, и, поскольку ваш код в конечном итоге скомпилирован в javascript, никогда не имеет смысла брать какое-либо приложение Java Desktop и нажимать кнопку преобразования. Это то, что Applets пытался сделать много лет назад... и мы все знаем, как это получилось;)
Нет, GWT не поддерживает менеджеров по расположению из Swing/AWT. Они не совместимы.
Источником несовместимости является то, что это абсолютно разные технологии с разными API. Swing/AWT основан на пикселях, а GWT - на HTML. Макеты GWT просто выводят различные теги HTML (элементы div/table/inline, ...), в то время как макеты Swing / AWT фактически вычисляют положение дочерних компонентов. В GWT положение детей вычисляется браузером, когда они отображаются.
Основная проблема заключается в том, что World Wide Web не является настольным приложением, независимо от того, насколько вы этого хотите. Есть множество проблем, которые приходят на ум:
WWW не имеет состояния, настольные приложения - нет. WWW обычно отслеживается с помощью файлов cookie, параметров URI и управления сеансами, и теперь, когда мы используем их в течение нескольких десятилетий, мы в основном перешли к проблеме WWW с сохранением состояния и отсутствием состояния.
WWW-страницы (внастоящее время) описываются с помощью некоторой формы XML и обычно CSS, в которых страница описывается как дерево. По сравнению с настольными приложениями, хотя, возможно, это почти то же самое с XML и простой кластеризацией компонентов, это не то же самое. Еще раз, одна из самых больших проблем заключается в том, что в этих компонентах DA виджеты имеют состояние с сохранением состояния на уровне приложения, в то время как в WWW вы можете быть действительно с состоянием, самое большее на уровне страницы, и даже для этого требуется JavaScript/AJAX.
Таким образом, прямое использование менеджеров компоновки не требуется. Но, допуская, что используемая вами структура веб-интерфейса позволяет это сделать, вы можете создать что-то, что ведет себя так же, как и менеджеры макетов. Хотя я не знаю конкретно о GWT, я считаю, что можно создать хотя бы простой менеджер макетов в JSP (или мой любимый Apache Wicket) и заставить его вести себя так же, как это делают менеджеры макетов Swing.
Обратите внимание, что я действительно имею в виду воссоздание всей концепции менеджеров компоновки здесь в виде набора специализированных классов / еще много чего, как ответил Питер Штибрани, GWT не поддерживает их напрямую (на самом деле я не слышал ничего кроме Swing) и я полагаю, что было бы больше усилий, чтобы создать упакованный / адаптер для Swing Layout Manager, а не просто создавать свои собственные, правильные для WWW.
Если вам нужно веб-приложение Swing, рассмотрите AjaxSwing, но будьте готовы к задержке в сети и потреблению ресурсов сервера. Я думаю, что как только появятся библиотеки для SVG/VML, мы увидим, что больше материала переместится в Интернет. Если вы хотите увидеть IDE JavaScript, посмотрите Lively Kernel от Sun Labs. Люди пробовали портировать Swing на GWT? Кажется очевидным, что есть AjaxSwing, который может портировать множество Swing на GWT, возможно, не на Java2D. Возможно, какая-нибудь умная компания найдет способ конвертировать Swing в технологию веб-клиента.