Swing desktop-development

Eu tenho uma pergunta muito geral sobre aplicativos desktop java-gu

Minha experiência Nos últimos anos, desenvolvi várias aplicações desktop, algumas usando Swing sozinho, outras Spring-RCP (o que foi ótimo, ainda não posso apenas apostar em uma estrutura que não vê mais atualizações há mais de 3 anos ) Também estou assistindo a Valkyrie RCP, mas parece-me que também não há muito movimento lá. Também desenvolvi aplicações web com Wicket, Tapeçaria e, mais recentemente, com JSF2 (Primefaces). Tendo adquirido alguma experiência em aplicativos da Web, parece-me que o java desktop-gui foi abandonado há muito tempo. É claro que eu não havia notado isso antes, mas, depois de desenvolver aplicativos da web, realmente vejo como a programação e a interface do usuário de desktop são dolorosas e complicadas em comparação diret

O que estou procurando: Não estou fazendo ciência de foguetes aqui, o que mais sinto falta é uma maneira fácil de criar uma forma do seguinte layout simples

label_a    input_a    feedbackMessage_a
label_b    input_b    feedbackMessage_b
....
button_save

Não se trata apenas do layout, esse é provavelmente o menor problema. Primeiro, estou procurando uma maneira de "vincular" os valores dos campos de entrada a algum tipo de "backing-bean-fields". Também quero usar feedback direto, o que significa que, se a validação de input_a falhar, quero uma mensagem exibida em feedbackMessage_a e em nenhum outro lugar. Terceiro, eu quero usar a validação JSR-303 com esse feedback direto. Se eu cavar o código fonte de um aplicativo de desktop típico, geralmente vejo um ouvinte de ação gigante para cada botão, onde toda essa atribuição de valor, validação e criação de mensagem de feedback foi escrita manualmente. Compare isso com uma estrutura da web como tapeçaria ou jsf2. O que você faria lá é "vincular" um campo de entrada a uma variável / campo com algum tipo de linguagem de expressão, e é isso. O valor está sendo validado (por exemplo, usando JSR-303 Annotations) e (se todos os valores forem válidos) passados para o campo vinculado do bean de backup automaticamente. Além disso, se ocorrer um erro de validação, uma mensagem de validação é criada, em que o ID do campo de entrada é usado para identificar o campo de entrada que é responsável. Se existir um componente de mensagem para esse ID específico, a mensagem de validação será definida lá. É simples e lógico.

gora, voltando ao desktop-gui; Para ter uma interface de usuário comparável, digamos, um formulário com 20 campos de entrada, eu provavelmente precisaria de 500 linhas de código de ouvinte, onde primeiro li o valor de cada campo de texto, valido-o e escrevo-o na variável correspondente . Se eu usasse o JSR-303, eu mesmo poderia chamar o validador, mas seria doloroso voltar ao campo de entrada correspondente e definir a mensagem de feedback lá ... adivinhe o que ... eu mesmo! Doloroso, não é?

Minhas perguntas Existe alguma maneira de aliviar a dor? Como você desenvolve aplicativos de desktop modernos? Quais estruturas você usa e por quê? Existe alguma possibilidade de usar uma maneira semelhante de ligação, como fazem os webframeworks? Como posso implementar "feedback direto", como explicado acima? Perdi um trem aqui ou realmente ficou muito mais simples escrever um aplicativo da web nos últimos anos, enquanto o java-desktop parece estar parado? (Exceto para JavaFx, mas isso não me ajuda nem um pouco)

Final words Não me interpretem mal, eu sou um grande fã de aplicativos desktop java. Em uma empresa de tamanho moderado como a em que estou trabalhando, com um ambiente homogêneo (onde todos os clientes têm a mesma versão java instalada e assim por diante), realmente não vejo o ganho de um aplicativo da web. Usando o webstart, o aplicativo inicia muito rápido (após o primeiro início do download, é claro). Ainda me parece que, enquanto os webframeworks centrados em frontend em Java avançam com velocidade da luz, o java-desktop quase não está se movendo. Embora eu possa viver do jeito que é, eu realmente tenho que fazer essas perguntas.

questionAnswers(6)

yourAnswerToTheQuestion