Existem muitas bibliotecas JRuby que tentam fazer devenvolvimento GUI com Java toolkits mais facilmente.
Nós conversamos com James Britt do projeto Monkeybars. A explicação de James do Monkeybars é:
Monkeybars é um JRuby Framework MVC que se sente no topo do Swing. Ele não envolve o Swing por si, mas sim apresenta a lógica de view (encapsulada em classes Swing) separadas do controller e model (em Ruby). Nesse sentido ele explora a ferramenta de design WYSIWYG Swing UI disponibilizada livremente, enquanto você desenvolve em Ruby. Inicialmente retirado do mundo real de aplicativos, Monkeybars foi modelado com testes e manutenção de grandes aplicativos na mente.
James explicou como Monkeybars gerencia iterações:
A meta do Monkeybars é desacoplar a view e o controller, o controller nunca deveria necessitar da referencia direta para a view. Invés disso, ele usa sinais para informar indiretamente a view que algo deve ser feito. Isso faz o controller ser testado muito mais fácil, desde que você não precisa se preocupar com a UI.
Monkeybars não vem com a idéia de construir os próprios componentes GUI, em vez disso ele permite escolher o método para construir GUI.
Monkeybars espera ter classes que representam um UI Swing. No Happy Camper nós quase sempre usamos o editor Netbeans UI para desenhar e compilar objetos UI, depois referenciamos eles via código Ruby na aplicação. A princípio você poderia também usar Profligacy, Cherry, ou qualquer SwiXML + Builder, embora eu não tenha visto o código que faz isso. (Além disso, veja meu comentário, mais tarde, sobre novidades planejadas para Monkeybars e tornando mais fácil para escrever código Swing.)
James explicou como os desenvolvedores estão usando Monkeybars:
Muitos usuários do Monkeybars estão usando em aplicações JRuby, mas sabemos que pelo menos uma pessoa caiu em uma aplicação Java existente. Monkeybars está disponível tanto em gem como em jar. (E como código fonte, é claro).
Nós perguntamos se seria possível usar Monkeybars para scripts GUI dentro de uma aplicação existente:
[..] Em uma aplicação Java você pode carregar e executar código Ruby, o qual poderia usar Monkeybars, ou em uma aplicação Ruby (assumindo que está rodando em JRuby) fazer chamadas quando você quer invocar uma GUI.
No entanto, sua questão me deixa pensando sobre um desktop GUI com código que normalmente não oferece isso. Por exemplo, enquanto desenvolve uma aplicação Web, pode ser bom se erros forem renderizados em uma agredável GUI e não no navegador e no terminal. Acontece que é realmente fácil Monkeybars dentro de uma aplicação Ramaze para que você possa renderizar um Swing form quando quiser. Transformando isso em um bom console de aplicativo multi-janela GUI, com opções para visualizar código fonte e docs, seria um projeto interessante.
Rawr é uma ferramenta que é útil quando desenvolve aplicações Monkeybars. James explica rawr:
Rawr é outro projeto que evoluiu a partir de necessidades do mundo real. Ele permite sua aplicação dentro de um jar executável provendo algumas tarefas Rake úteis. Você pode também fazer um arquivo .exe no Windows, ou um .app no Mac. (Estamos trabalhando em adicionar um packager no Linux). Isso inclui icones, jars média/content, e mesmo compilando seu JRuby em classes para ajudar a acelerar o tempo de carga. Essa é a meneira como empacotamos o JotBot, nossa aplicação de tempo de monitoramento o qual nós acreditamos que é a primeira aplicação desktop comercial em JRuby.
Nós perguntamos sobre o futuro do Monkeybars, depois da 1.0:
O core é muito sólido agora, e não tem nenhuma mudança significante em quase 1 ano. Nós temos uma grande produção de aplicações que seriam dolorosas de refatorar se fizessemos uma grande mudança agora, então provavelmente só vai construir fora dessa fundação em vez de mudá-la.
Entretanto, com essa estabilidade, existem algumas funcionalidades "bom para ter" que estamos considerando. Por exemplo, estamos nos preocupando em torná-lo mais fácil para criar as classes Swing UI usado uma custom DSL ou sintaxe builder. Swing é grande, então não vamos fingir tentar englobá-lo todo, mas muitos forms UI básicos e componentes serão disponibilizados mais facilmente na sintaxe convencional do Ruby.
Devido a isso, podemos olhar por geradores de aplicação. Muitas aplicações tem uma série de forms comuns e comportamentos: tela, ícone do sistema, forms de ajuda e "sobre" e assim por diante. Deveria ser fácil para alguém obter um funcionamento mínimo de aplicações desktop rodando em poucas linhas de comando ou tarefas Rake. A aplicação pode depois ser desenvolvida, com componentes UI adicionais construido usando o código ou classes Java compiladas.
Logan tem trabalhado em view binding, o qual é uma maneira mais fácil para fazer mapping com nosso model e view, e fazendo o dado parecer como se entivesse sempre sincronizado.
Outro projeto inclui alguns helpers para coisas comuns que pensamos que o Swing deveria ser capaz de fazer, mas correntemente não faz facilmente. Por exemplo, ser capaz de desativar itens específicos em um combo box, ou menus para campos texto. Contudo um outro empreendimento é Cucumber + Rspec para usar com Monkeybars.
Finalmente James forneceu uma lista de recursos e lugares para acompanhar o desenvolvimento do Monkeybars, ou perguntando questões para o time core do Monkeybars (atualmente James, Logan Barnett, David Koontz):
Tem o monkeybars.org é claro; nós estamos no processo de atualização de docs e screencasts para o release 1.0.
Estamos no IRC no #monkeybars na Freenode, e existe um grupo no Google também:
http://groups.google.com/group/monkeybars
Logan Barnett bloga sobre Monkeybars em:
http://www.logustus.com
Tem um vídeo de David Koonts no RubyConf 2008:
http://rubyconf2008.confreaks.com/monkeybars-easy-cross-platform-guis.html
Martin Slader cobriu Monkeybars no Ruby Manor: http://rubymanor.org/videos/gui_manor_born/
Pessoas podem testar uma aplicação comercial para eles mesmo baixando JotBot e pedindo uma chave trial free:
http://www.getjotbot.com
Estamos também começando a mover algumas coisas para Kenai que temos uma página mais estável para documentação de usuário.
http://kenai.com/projects/monkeybars
Colocaremos detalhes sobre Monkeybars na home page como eles estão organizando.
E você pode nos seguir no twitter:
@jamesbritt
@logan_barnett
@dkoontz
@thehappycampers
O que você usa para construir GUIs com JRuby?