Swing desktop-development

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

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

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

label_a    input_a    feedbackMessage_a
label_b    input_b    feedbackMessage_b
....
button_save

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

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

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

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

5
задан Mario B 22 February 2012 в 09:48
поделиться