5 бесплатных Docking Frameworks для Java



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

Некоторое время назад мы создали инструмент для веб-разработчика. Программа была написана на Java и представляла собой desktop приложение. Изначально интерфейс программы не позволял настраивать рабочую область. Как оказалось это была большая ошибка, так как у каждого веб-разработчика уже были определенные предпочтения по настройке рабочего пространства.

После небольшого брэйншторминга мы решили построить интерфейс программы на базе одного из Docking Framework для Java. К сожалению стандартная библиотека Java Swing не предоставляет подобного решения, а использование JDesktop и JInternalFrame требует значительной доработки.

Требования к библиотеке Docking Framework были выдвинуты следующие:
  1. Располагать панели можно в любом порядке на рабочей области.
  2. Панели можно объединять, перемещать, сворачивать, извлекать из рабочей области в независимые окна (что бы комфортно работать на двух мониторах).
  3. Свернутые панели должна быть возможность открыть (при этом не восстанавливать).
  4. Должна быть возможность подключить свой Look and Feel.
Идеальный вариант, если библиотека предоставляет все возможности, что и у Microsoft Visual Studio 2010.

После недели поиска и анализа существующих решений, было выделено 5 Docking Framework библиотек для Java. Немного подробнее о каждой.

Flex Dock

URL: flexdock.dev.java.net
Лицензия: The MIT License

Довольно популярная библиотека с очень простым API на первый взгляд. Предоставляет все основные возможности: поддержка табов, Drag and Drop панелей, floating windows, возможно сохранять и восстанавливать состояние панелей, изменять Look and Feel и др.

На Javalobby нашел статью, где читателя знакомят с основами и показывают на примере как использовать библиотеку.

Из документации есть JavaDoc и User Guide в PDF формате. Эти документы можно найти в дистрибутиве библиотеки. User Guide еще сырой. Большинство разделов пустые, поэтому во время активного девелопмента прийдется повозиться. К сожалению отдельных примеров нет, но можно покопаться в исходниках Demo.

Для нас основным недостатком данной библиотеки было то, что нельзя панели извлекать в независимые окна, поэтому нам она не подошла.


Docking Frames

URL: dock.javaforge.com
Лицензия: LGPL 2.1

Из документации есть JavaDoc, Guide for the core library и Guide for the common project. На сайте есть несколько небольших примеров с объяснениями. Так же на сайте представлено подробное описание основных возможностей и скриншоты.

Основная философия данной библиотеки заключается в гибкости. Практически все можно заменить или модифицировать. Наверно поэтому API содержит впечатляющее количество интерфейсов и классов. Из моей практики, чем гибче и универсальнее API, тем сложнее с ним работать. Так и оказалось.

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



InfoDock

URL: www.infonode.net
Лицензия: GPL + комерческая

Запустив только демо приложение на сайте стало ясно, что данная библиотека удовлетворяет всем нашим требования, включая возможность извлекать панели в отдельные окна. Кроме того, библиотека позволяет сохранять и восстанавливать состояние рабочего пространства, объединять панели и, что очень важно, предоставляет удобный API. Что бы поменять Look and Feel достаточно изменить требуемные свойства панелей и, где необходимо, реализовать свой ComponentPainter.

Документация на высшем уровне. Есть Developer’s Guide, где каждая возможность библиотеки описана с примерами кода. Порадовали рекомендации на разные случаи. Например, когда необходимо в панель встроить AWT heavyweight компонент такой как Cavas.

API спроектирован хорошо и во время работы нареканий не вызвал.

За несколько дней удалось сделать с помощью этой библиотеки все что хотелось и заинтегрить ее в наше приложение. Это был наш победитель.



MyDoggy

URL: mydoggy.sourceforge.net/
Лицензия: LGPL

Как описано на сайте, это «IntelliJ IDEA like docking framework». Это значит, что все панели сосредоточены вокруг одной главной области. Каждая панель закреплена за определенным sidebar. На одном sidebar может размещаться несколько панелей.

К сожалению нам эта библиотека не подошла, так как она не позволяет объединять панели. Все остальное данная библиотека позволяет делать: панели можно сворачивать, выносить в отдельные окна, перемещать в другие sidebar, менять Look and Feel и др.

Документация представлена из FAQ и описания ключевых интерфейсов. JavaDoc отсутствует, но дистрибутив идет сразу с исходным кодом. Мое личное мнение – документация сильно хромает по сравнению с другими аналогичными библиотеками.



Sanaware

URL: www.javadocking.com/
Лицензия: GPL + комерческая

У данной библиотеки самый простой API из всех рассмотренных. Данная библиотека удовлетворяет практически всем нашим требованиям, кроме третьго — свернутую панель можно только восстановить и нельзя открыть без восстановления.

Из документации присутствует Getting Started на сайте, Developer Guide построеный по принципу How to, JavaDoc и несколько примеров на сайте. К сожалению этой документации для ознакомления с библиотекой оказалось недостаточно и приходилось копаться дополнительно в ее исходном коде.



NetBeans и Eclipse

Платформа NetBeans предоставляет свой Docking Framework, однако извлечь его оказалось непосильной задачей. Честно говоря, начиная с версии NetBeans 6.0, внутри все модули очень сильно переплелись, так, что сделать какой-то модуль standalone стало невозможным.

Eclipse также предоставляет мощный Docking Framework, но он основан на SWT. А SWT к сожалению не дружит со Swing.

Выводы

Библиотек для построения Docking Application на Java достаточно. Есть из чего выбрать. Главное определиться с требованиями и вперед. Надеюсь наши результаты поиска помогу в выборе подходящего Docking Framework для Java.


1 комментарий

avatar
Docking Frames
«Например нельзя извлеченную в отдельное окно панель перемещать над основным окном, так как библиотека понимает это как попытку вернуть панель обратно в основное окно»
Перетаскивание с одновременно нажатой клавишей Shift позволяет помещать панель как угодно без возврата обратно в основное окно.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.