OpenOBEX Frontend, primeira demonstração
Este blog deixou de ser mantido, mas o autor continua escrevendo aqui. Não deixe de assinar o novo feed!
Para aqueles que ficaram curiosos quanto ao meu novo projeto (se é que existe alguém), acabei de criar uma screencast - bem curta e direta - que mostra praticamente tudo o que implementei até o presente momento. Além da linda janela “About” que fiz sozinho no Gimp (tirando o telefone vermelho, é claro),
já é possível de se configurar o comportamento da aplicação (dados de conexão, tipos de arquivos) e navegar pelo sistema de arquivos do dispositivo. Hooray!
Devo dizer que este projeto está se mostrando um tanto quanto complexo (mas interessante), pois estou trabalhando com alguns aspectos do Swing que nunca havia trabalhado antes. Por exemplo, algo que era totalmente desconhecido por mim era como se trabalhar com componentes JTree. Mesmo achando a API complexa em demasia (mesmo quando comparamos com outros componentes complexos, como JTable), é impressionante como esse troço todo é flexível! Nesta aplicação, além de precisar implementar um CellRenderer mais elaborado (para mostrar os ícones de acordo com o tipo de arquivo e tudo mais), tive que montar um esquema de carregamento de nós sob demanda, ou seja, a lista de diretórios e arquivos é carregada e mostrada conforme os nós da árvore vão sendo expandidos. Ah, também foi necessário criar uma implementação de TreeSelectionListener para habilitar e desabilitar itens do menu de contexto de acordo com os arquivos e diretórios selecionados. Desenvolver em Swing não é fácil, mas é legal!
Outra coisa interessante é que tudo funciona de forma multi-threaded. Quando a aplicação está carregando os dados de um determinado diretório, o usuário é informado através de uma pequena animação situada no canto superior direito da tela e, ainda assim, o usuário não precisa ficar esperando a tarefa terminar para fazer outras coisas. Ele pode, por exemplo, expandir todos os diretórios rapidamente e, conforme os dados vão sendo coletados, a árvore vai sendo atualizada com os dados que chegam. Embora essa questão da “responsividade” seja importantíssima, infelizmente ainda vemos aplicações que travam a cada input do usuário. (se tem uma coisa que eu odeio é conseguir gerar mais input do que a aplicação que eu estou usando é capaz de processar…)
Continuando com o relato, algo - de certo modo - semelhante foi implementado no módulo de configurações. Como pode ser visto na screencast, quando as configurações mudam, outros elementos da aplicação são notificados das mudanças no mesmo momento. No exemplo, a renderização dos diretórios e arquivos na JTree é modificada dinamicamente quando reconfiguramos os campos que descrevem a classificação dos arquivos de acordo com suas extensões.
Enfim, há bastante coisa que poderia ser discutida a respeito do que venho escrevendo neste modesto projeto. Se você se interessa por programação desktop em Java, dê uma olhada na screencast e baixe o código da aplicação quando este for disponibilizado… essa é uma das vantagens do mundo open source: aprendizado! Apesar de não ser algo estupendo e muito menos impressionante, é um bom começo para aqueles que querem aprender a criar aplicações Swing menos triviais de forma efetiva.
Em breve, disponibilizarei mais informações sobre o andamento desse mini-projeto. O código - escrito no NetBeans 6 M10 - será colocado no ar logo que terminar de implementar as funcionalidades previstas.
UPDATE: Veja este post para mais detalhes.
Tags: celular, comunicação, demonstração, java, linux, obexftp, open source, openobex, projeto, screencast, swing

9 de julho de 2007 às 1:58 pm
Usando o NetBeans 6 M10? Significa então que você já está utilizando o Swing Application Framework (JSR-296) e Beans Binding (JSR-295)?
Para multithreading, você está usando
TaskouSwingWorker? Eu sugiro o primeiro.Também pode utilizar certos componentes SwingX, como o JXTipOfTheDay.
Parece que seu programa tá ficando legal! T+!
9 de julho de 2007 às 2:02 pm
E não se esqueça de utilizar um look and feel mais interessante que o Metal Ocean.
O Ocean é melhor que as outras variações do Metal, mas ainda é muito fraco. Por exemplo, o combobox é bem maior do que os textfield’s. JGoodies, Substance e outros têm um microdesign superior.
9 de julho de 2007 às 2:46 pm
E aí, Rafael!
Resolvi utilizar o NetBeans 6 M10, mas não há nada nesse projeto que não pudesse ser feito com o NetBeans 5.5, por exemplo. Só fiquei curioso quanto à falação sobre o novo editor de código e blá-blá-blá… (que ainda está beeeeem longe do editor do Eclipse, apesar das melhorias).
Na verdade, não estou utilizando framework algum. Posso até ver a possibilidade de fazer modificações posteriormente para incorporar isso, mas a priori estou mantendo o código livre desses frameworks e bibliotecas de componentes. Tem bastante coisa não muito agradável no código e que com certeza poderia ter sido feito de forma mais “elegante”… mas, como disse em um post anterior, a idéia também é disponibilizar um código que possa mostrar, de uma forma geral, como se criar um aplicativo Swing sem muito lero-lero.
Quanto ao Look and Feel, acredito que, para este projeto, o Metalzão padrão tá excelente. Também tenho uma puta bronca do
mas esse e outros problemas realmente não estão incomodando. Se você viu a screencast, já aviso que a aplicação está bem diferente do que foi mostrado! (mudei os ícones, coloquei uma toolbar, entre outras coisas):
JComboBox,Apesar de estar com os componentes e Look and Feel padrão, está ficando massa.
Abração!
9 de julho de 2007 às 2:59 pm
Ah sim, estou usando o
SwingWorkermesmo… é o que eu sei. Mas vou dar uma olhada nessa APITask.. (acho que vi algo do tipo no seu blog)!12 de julho de 2007 às 6:47 pm
Também concordo com a questão do editor: o do Eclipse ainda é muito superior ao do NetBeans. Tem até spell checker.
Sobre a Task, caso você resolva utilizar o Swing Application Framework (JSR-296), pode ver algo sobre isso no meu blog mesmo.
Esse framework é excelente. Pequeno, fácil de entender e de usar, e, além das funcionalidades que andei comentando no meu blog e no seu, torna quase trivial implementar uma statusbar descente.
O único problema é que a API não está pronta. Resultado: vou ter que atualizar meus softwares e os textos no meu blog e no seu.
12 de julho de 2007 às 6:58 pm
Eu vi o screencast. Parace que o programa tá interessante.
Que tal colocar aquela animaçãozinha maneira (Working…) numa barra de estado?
Do jeito que está, quando ela aparece, o painel muda de tamanho, dando impressão que está “pulando”, e isso não é legal.
12 de julho de 2007 às 7:05 pm
Essa questão do framework estar em desenvolvimento é um dos problemas… a API ainda é instável e métodos/classes mudarão bastante até tomarem a devida forma. Mas sem dúvidas, pelo que eu li sobre o assunto, trata-se de algo interessante… inclusive, acredito que tal framework me ajudaria a implementar as coisas que fiz de um modo mais fácil, mas achei melhor deixar para uma próxima ocasião…
Quanto à mudança do tamanho do
Quer dizer, eu montei o
JTreequando a animação aparece, na verdade foi intencional!Framee só vi que isso acontecia após rodar o programa pela primeira vez… mas, não sei o porque, acabei achando legalzinho! Mas vc tem razão, vou “consertar” isso!Falando nisso, a aplicação já está praticamente pronta… talvez eu monte outra screencast mais completa (e com voz, para explicar o que está se passando) e disponibilize um link Java Web Start para as
cobaiaspessoas testarem.13 de julho de 2007 às 7:15 pm
Eu sou da escola do Karsten Lentzsch, do JGoodies. Segundo ele, um dos vários pecados nas GUI’s é justamente esse lance dos componentes gráficos “pular”.
O JGoodies Forms (tenho certeza que você conhece), que para mim é o melhor em se tratando de layout, foi desenvolvido para dificultar o aparecimento desses e de outros problemas. Só uso o gerenciador de layout swing-layout por causa do Matisse.
Por mim, o Matisse trabalharia em cima do FormLayout… Algo assim.
23 de maio de 2008 às 3:54 am
Fala, Daniel? Beleza? Quanto tempo…
Como vai indo o Obex? Adiante?
Abraços!
23 de maio de 2008 às 11:51 am
Fala cara! Tranquilo e aí?
Na verdade eu até faço uma coisa ou outra nesse projeto, mas como eu arranjei com um celular que suporta bluetooth, eu já não tenho mais motivo para continuar o desenvolvimento, até pq a maioria dos sistemas operacionais conseguem acessar dispositivos bluetooth sem problemas…