Swing Desktop-разработка
У меня очень общий вопрос относительно 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) и (если все значения там, где оно допустимо) автоматически передается в связанное поле базового компонента. Также, если возникает ошибка проверки, создается сообщение проверки, где идентификатор поля ввода используется для идентификации поля ввода, которое является ответственным. Если для этого конкретного идентификатора существует компонент сообщения, то здесь устанавливается сообщение проверки. Это просто гладко и логично.
Теперь вернемся к рабочему столу; чтобы иметь сопоставимый пользовательский интерфейс для, скажем, формы с 20 полями ввода, мне, вероятно, понадобится около 500 строк кода слушателя, где я сначала сам читаю значение каждого текстового поля, проверяю его сам и записываю его в соответствующую переменную сам, Если бы я использовал JSR-303, я мог бы сам вызывать валидатор, но было бы больно возвращаться к соответствующему полю ввода и устанавливать там сообщение обратной связи... угадайте, что... я сам! Больно, не правда ли?
Мои вопросы: есть ли способ облегчить боль? Как вы разрабатываете современные десктоп-приложения? Какие рамки вы используете и почему? Есть ли возможность использовать такой же способ привязки, как у webframeworks? Как я могу реализовать "прямую обратную связь", как описано выше? Я пропустил поезд здесь или действительно стало намного проще писать веб-приложение за последние несколько лет, в то время как java-рабочий стол, похоже, застрял? (За исключением JavaFx, но это мне немного не помогает)
Заключительные слова Не поймите меня неправильно, я большой поклонник java desktop-приложений. В компании среднего размера, такой как та, в которой я работаю, с однородной средой (где на всех клиентах установлена одинаковая java-версия и т. Д.), Я действительно не вижу выгоды от веб-приложения. С помощью веб-старта приложение запускается очень быстро (после первого запуска с загрузкой, конечно). Тем не менее, мне кажется, что в то время как веб-фреймворки, ориентированные на интерфейс, в Java движутся со скоростью света, java-рабочий стол почти не движется вообще. Хотя я могу жить так, как есть, мне действительно нужно задавать эти вопросы.
3 ответа
Я слышал хорошие отзывы от пользователей, которые использовали систему валидации от JGoodies, даже в сочетании с их FormLayout
который, как следует из названия, является LayoutManager
специально разработанный, чтобы компоненты выглядели как формы.
У меня лично есть только опыт работы с FormLayout
и внутренне разработанная структура связывания, в которой создание пользовательского интерфейса, как вы описываете, сводится к одной строке для каждой комбинации метки-редактора. Конечно, есть библиотеки, которые дают вам именно это, но у меня нет опыта работы с ними, поэтому нет рекомендаций по этому вопросу.
FormLayout
- Веб-сайт
- демо (прямая ссылка на веб-старт)
- Снимок экрана типичного макета с использованием
FormLayout
Валидационные рамки
- Веб-сайт
- демонстрационный веб-старт
- Скриншот их валидации в действии
Могу ли я предложить посмотреть на Eclipse Scout? Он основан на Java/Eclipse и доступен по EPL.
Скаут в первую очередь занимается созданием бизнес-приложений. Благодаря четкому отделению клиентской модели пользовательского интерфейса от фактического рендеринга пользовательского интерфейса у вас есть возможность запускать ваше приложение с Eclipse SWT, Swing или веб-приложением (на основе Eclipse RAP это будет выпущено в выпуске Juno).
Что касается вашего вопроса о проверке полей, я уверен, что вы найдете удобный механизм (метод перезаписи execValidate() нужных полей) удобным для использования.
Пожалуйста, ознакомьтесь с доступными руководствами на нашей вики-странице. Если вам нужно решение только для клиента (без резервного сервера), также подумайте об этом.
По вопросам, связанным с Eclipse Scout, пожалуйста, используйте форум проекта.
Надеюсь это поможет.
Вы можете уменьшить свою боль, следуя популярным и успешным шаблонам рабочего стола в сочетании с чистым стилем реализации. Я настоятельно рекомендую вам изучить шаблон Модель-Представление-Представитель (MVP) и Модель презентации.
Хорошее введение - "Организация логики презентации" Фаулера. Стиль реализации см. В разделе "Guter Schreibstil für Swing" по адресу http://www.jgoodies.com/downloads/articles-and-presentations/ Слайды на немецком языке, код на английском языке;-)