A gente desenvolve com Java em Desktop aqui.
Eu acho bastante produtivo, desde que se tenha uma IDE. Usamos o GridBagLayout e essas coisas feias que o pessoal falou por aí. Somos auxiliados nesse sentido pelo VE, não usamos o GridBag na mão.
Mas certamente, não é um mar de rosas. O VE tem seus problemas, e o Swing tem uma curva de aprendizado gigantesca. Agora, acho um ponto positivo o fato de ser muitíssimo fácil de alterar o seu comportamento visual. Aqui temos tabelas que fazem auto-filtro, por exemplo.
Mas, já citando o Thingol, “o swing é mesmo meio esquizofrênico”. Algumas coisas que deveriam ser ridiculamente fáceis (bem citadas pelo Marcio, como definir um número máximo de caracteres ou só aceitar maiúculas) são complicadas de se fazer.
Preferir extender document do que mudar uma simples propriedade? Tá louco? Isso sim é gostar de sofrer…
Agora, a grande vantagem. Temos usuários em Linux e Windows. Em outra de nossas aplicações, usamos diversos protocolos de rede.
Ah sim, um idioma comum em aplicações desktop é praticamente impossível de se implementar automaticamente em java: gravar arquivos no diretório onde o binário da aplicação está. Você simplesmente não consegue obter essa informação no java!!! Não estou falando do diretório “.”. Esse aí, refere-se ao local onde o usuário configurou para abrir o aplicativo, não ao local real do binário.