Swing Desktop-разработка - PullRequest
       99

Swing Desktop-разработка

4 голосов
/ 22 февраля 2012

У меня очень общий вопрос относительно java desktop-gui-приложений.

Мой опыт: В последние годы я разработал несколько настольных приложений, некоторые из которых используют только Swing, некоторые Spring-RCP (что было здорово, но я не могу просто поспоритьна платформе, которая больше 3 лет не видела обновлений).Я также смотрю RCP Valkyrie, но мне кажется, что там тоже не так много движений.Я также разрабатывал веб-приложения для Wicket, Tapestry и, в последнее время, для JSF2 (Primefaces).Получив некоторый опыт в веб-приложениях, я чувствую, что java desktop-gui давно заброшен.Конечно, я раньше этого не замечал, но после разработки веб-приложений я действительно вижу, насколько болезненным и сложным является программирование настольных систем в прямом сравнении.

Что я ищу: Я здесь не занимаюсь ракетостроением, что мне больше всего не хватает, так это простой способ создать форму следующего простого макета

label_a    input_a    feedbackMessage_a
label_b    input_b    feedbackMessage_b
....
button_save

Дело не только в макете, это, вероятно, самая маленькая проблема,Сначала я ищу способ «связать» значения полей ввода с какими-то «полями бэк-бина».Также я хочу использовать прямую обратную связь, что означает, что если проверка input_a не удалась, я хочу, чтобы сообщение отображалось в feedbackMessage_a и больше нигде.В-третьих, я хочу использовать проверку JSR-303 с этой прямой обратной связью.Если я копаюсь в исходном коде типичного настольного приложения, я обычно вижу гигантский слушатель действий для каждой кнопки, где все это присвоение значений, проверка и создание сообщений обратной связи были написаны вручную.Сравните это с веб-структурой, такой как гобелен или jsf2.Что бы вы там сделали, это «привязали» поле ввода к переменной / полю с помощью какого-либо языка выражений, и это все.Значение проверяется (например, с использованием аннотаций JSR-303) и (если все значения там, где оно допустимо) автоматически передается в связанное поле базового компонента.Кроме того, если возникает ошибка проверки, создается сообщение проверки, где идентификатор поля ввода используется для идентификации поля ввода, которое является ответственным.Если для этого конкретного идентификатора существует компонент-сообщение, то там устанавливается сообщение проверки.Это просто гладко и логично.

Теперь вернемся к desktop-gui;чтобы иметь сопоставимый пользовательский интерфейс для, скажем, формы с 20 полями ввода, мне, вероятно, понадобится около 500 строк кода слушателя, где я сначала сам читаю значение каждого текстового поля, проверяю его сам и записываю его в соответствующую переменную сам,Если бы я использовал JSR-303, я мог бы сам вызывать валидатор, но было бы больно возвращаться к соответствующему полю ввода и устанавливать там сообщение обратной связи ... угадайте, что ... я сам!Больно, не так ли?

Мои вопросы: Есть ли способ облегчить боль?Как вы разрабатываете современные десктоп-приложения?Какие рамки вы используете и почему?Есть ли возможность использовать такой же способ привязки, как у webframeworks?Как я могу реализовать «прямую обратную связь», как описано выше?Я опоздал на поезд или действительно стало намного проще писать веб-приложение за последние несколько лет, в то время как java-рабочий стол, похоже, застрял?(За исключением JavaFx, но это мне немного не помогает)

Заключительные слова Не поймите меня неправильно, я большой поклонник java desktop-приложений.В компании среднего размера, такой как та, в которой я работаю, с однородной средой (где на всех клиентах установлена ​​одинаковая java-версия и т. Д.), Я действительно не вижу выгоды от веб-приложения.С помощью веб-старта приложение запускается очень быстро (после первого запуска с загрузкой, конечно).Тем не менее, мне кажется, что в то время как веб-фреймворки, ориентированные на интерфейс, в Java движутся со скоростью света, java-рабочий стол почти не движется вообще.Хотя я могу жить так, как есть, мне действительно нужно задавать эти вопросы.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2012

Я слышал хорошие отзывы от пользователей, которые использовали платформу валидации от JGoodies, даже в сочетании с их FormLayout, который, как следует из названия, является LayoutManager, специально разработанным для того, чтобы компоненты выглядели как формы.

У меня лично есть только опыт работы с FormLayout и собственной разработанной инфраструктурой привязки, в которой создание пользовательского интерфейса, как вы описываете, сводится к одной строке для каждой комбинации меток-редакторов.Конечно, есть библиотеки, которые дают вам именно это, но у меня нет опыта работы с ними, поэтому нет рекомендаций по этому вопросу.

FormLayout

Валидационная структура

4 голосов
/ 23 февраля 2012

Могу ли я предложить взглянуть на Eclipse Scout ? Он основан на Java / Eclipse и доступен по EPL.

Скаут в основном занимается созданием бизнес-приложений. Благодаря четкому отделению клиентской модели пользовательского интерфейса от реального рендеринга пользовательского интерфейса у вас есть возможность запускать ваше приложение с Eclipse SWT, Swing или веб-приложением (на основе Eclipse RAP это будет с выпуском Juno).

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

Пожалуйста, ознакомьтесь с доступными руководствами на нашей вики-странице. В случае, если вам нужно решение только для клиента (без резервного сервера), также учтите это howto .

Для вопросов, связанных с Eclipse Scout, пожалуйста, используйте форум проекта.

Надеюсь, это поможет.

3 голосов
/ 01 июня 2012

Вы можете уменьшить свою боль, следуя популярным и успешным шаблонам рабочего стола в сочетании с чистым стилем реализации. Я настоятельно рекомендую вам изучить шаблон Модель-Представление-Представитель (MVP) и Модель представления.

Хорошим введением является «Организация логики представления» Фаулера. Стиль реализации см. В разделе «Guter Schreibstil für Swing» по адресу http://www.jgoodies.com/downloads/articles-and-presentations/. Слайды на немецком языке, код на английском языке; -)

...