Dicas de telas em Java Swing

Estou precisando migrar um ERP feito em Delphi para java.
tenho experiencia em java web , DAOS etc… Porém terei que fazer em swing.
Minha dúvida é como montar a estrutura das telas… tipo…
Tela Principal =JFrame
Telas Secudarias,Cadastros, etc… JDialog.
Ou usar JInternalframe(MDI)
Gostaria de saber se existe algum site com exemplo telas swing.
Ainda estou pensando em fazer, a tela principal tendo um Jtree na esquerda sendo que a cada click em um item da árvore,
abre a tela na direita, tipo O Programa Validador do Sped Fiscal que tem no site da receita.
Então pessoal gostaria da opinião de acordo com as experiencias de vcs

Obrigado


Rodrigo

http://java.sun.com/docs/books/tutorial/uiswing/

Só use MDI se você realmente quiser que os usuários possam manter várias janelas abertas ao mesmo tempo. Cansei de ver o pessoal usar JDesktopFrame/JInternalFrame porque acha mais bonitinho e depois ficar escrevendo código pra que o usuário não possa abrir mais de uma janela.

Ou seja, se quer SDI, use JDialogs modais.

Quanto à arvore, é uma boa idéia, mas se você achar que dá muito trabalho pra implementar use JMenus mesmo.

tnaires,
realmente o que você disse sobre MDI , tens razão , comparando a exaustivas pesquisas que estou fazendo.
É possível com JDialogs, e não criar janelas modais, ser possível abrir varias janelas ao mesmo tempo, mas SEM usar JIternalFrame. Ex:
Abrir a janela de notas fiscais, e ao mesmo tempo ir no menu e abrir o cadastro de clientes??? algo desse tipo que me deixa na duvida em talvez usar JInternalFrame.

Outro detalhe é a questão de se implementar MVC, existe algum tutorial indicado para que faça da melhor maneira.
Faço essas perguntas, pois nao quero ter supresas no meio do desenvolvimento.

Desde já obrigado pelas dicas.


Rodrigo

[quote=rodjle]É possível com JDialogs, e não criar janelas modais, ser possível abrir varias janelas ao mesmo tempo, mas SEM usar JIternalFrame. Ex:
Abrir a janela de notas fiscais, e ao mesmo tempo ir no menu e abrir o cadastro de clientes??? algo desse tipo que me deixa na duvida em talvez usar JInternalFrame[/quote]
É possível usar JDialog para isso sim, mas se você quer MDI, considere usar JInternalFrame.

Quanto ao exemplo que você deu, há algumas adversidades que é preciso tratar. Suponha que a tela de notas fiscais esteja aberta e o usuário abra a tela de clientes para cadastrar um novo cliente. Essa atualização precisa aparecer em todas as janelas que já estavam abertas e que dependam dos dados alterados - nesse caso, a tela de notas fiscais. O uso do padrão Observer pode ajudar nesse caso.

Pessoal,
muito obrigado pelas dicas,
será muito útil para minhas pesquisas e desenvolvimento.

Obrigado


Rodrigo

Registry é mais adequado para isso do que Singleton, creio.

Não sei que outros recursos são esses que o JFrame tem e o JDialog não tem (poderia exemplificar?), mas se você quer um form modal, JFrame não é adequado.

Não cara, JInternalFrame é adequado para MDI. Não há nenhum problema em criar “cadastros, pesquisas, pesquisas para relatórios” e etc usando JInternalFrame, desde que o que seu cliente deseje seja uma interface com várias janelas abertas dentro de uma janela principal.

Olá amigo

dá uma olhada neste framework

http://oswing.sourceforge.net/

Silvio Guedes

Retorna sim :stuck_out_tongue:

// Isso aqui retorna sempre o mesmo frame. Registry.get("frameUsuarios");

Muito bem explicado,
acho que as ideias de vocês já me instrui para que lado pesquisar.
Gostei da ideia de utilizar herança visual, usei mto em delphi isso, e vou usar também nesse projeto , certamente.
Vou olhar o livro que você me recomendou e vamos ver no que dá.
Grande abraço e obritgado


Rodrigo

Gente será que eu consigo aprender java?

Se usar como mtivação o que você escreveu no rodapé do seu próprio Perfil, consege. :wink:
Leia os tutoriais daqui, faça pequenos trechos de código para fixar seus conhecimentos,depois pegue códigos que você encontrar por aí, modifique,faça adaptações, melhoramentos.E não tenha medo de ler, leia muito.

Bem-vinda ao GUJ! :smiley:

Obrigada pelo carinho de responder. Depois que entrei aqui fiquei mais motivada…

Sugiro a você a comprar ou baixar o livro: The JFC Swing Tutorial Second Edition, para um completo intedimento do framwork SWING.
MVC nada mais é que dividir as tarefas em pacotes.

Modelo -> mapeamento de banco de dados, TO, DAO entre outros padrões de banco de dados tudo coloca nesse pacote.

Controle -> em JEE se coloca classes implementadas com Struts entre outros frameworks de controle, no caso de Swing coloca todas os Listernes.

Visão -> tudo que for visual, JFrames, JDialogs etc… eu costumo a criar uma classe pra modelamento para cada JFrame, tipo serve pra buscar os texto (Intenacionalização) com auxilio de uma classe que busca a chave criada por você em um arquivo de propriedades, e retorna esse valor em String e é setado via cada método correspondende a casa componente assim quando você flaga o idioma de PT BR para EN UK tudo muda em um piscar de olhos claro com alguns controles.

Detalhe tudo que tiver em seus correspondentes pacodes devem ser visiveis apenas nos mesmos, claro que um pacote vai precisar de outro então você tem várias formas de fazer essa visibilidade a que eu mais prefiro é por Fachadas, costumo a criar uma fachada pra cada pacote e habilitar a visibilidade de cada método na fachada correspondente.

Esse modo de desenvolvimento é bom pois você pode empacotar todo a pacote e disponibilizar apenas o .class dos pacotes e quem precisar basta importar como se fosse uma lib e usar.

Ah explore bastante o padrão Singleton nas janelas, isso torna as janelas muito mais rápidas em sua visualização sem falar que, em casos como recuperação de dados aos obterInstancia ou getInstance() da janela os dados já estaram setados lá mão na roda isso.

Espero ter ajudado.

Bom cara acho que tu pode fazer assim!

Cria 3 pacotes basicos em português ou em qual idioma preferir, eu prefiro português mesmo dessa forma:

modelo, visao, controle. Claro que vai ser necessário ter outros pacotes como pacote Util (Constantes, Classe responsável por localizar um arquivo de propriedades, abir, ler e até escrever caso precise, Relogio entre outras coisas).

Eu costumo a criar um pacote unico chamado: Principal, onde crio a unica classe que contem um MAIN, em toda a aplicação por vários motivos um deles a Segurança.

apartir dessa classe principal que se é chamado todas as outras telas(JFrames).

Outro costume meu é usar JDialog apenas para telas de ajuda; se vai haver formulário e tudo mais prefira sempre JFrame tem muito mais recursos que qualquer outro componente.

para exibir alerta use JOptionPane não há melhor.

JInternalFrame é bom para poucas coisas, como um componete utilitário como calendário, agenda, calculadora ou outros que você pode disponibilizar para o usuário ali mas cadastros, pesquisas, pesquisas para relatórios e até mesmo os relatório (ou abrir um PDF por fora também é uma) é bom criar um JFrame para eles se basei no padrão Apple que usa Swing ou outras empresas que não fazem tudo no JInternalFrame pois limita muito e tem vários fatores de complicação nisso.

Agora sim espero ter respondido as perguntas feitas no inicio do tópico.

Registry é mais adequado para isso do que Singleton, creio.

Registry não retorna a mesma instância do objeto que você criou, exemplo uma tela de cadastro de usuário, a pessoa preencheu o formulário mas nessa mesma tela chama outra e dá um Dispose na tela de cadastro momentaneamente ao retornar usando um singleton além de recuperar os dados e não precisar criar mais um montoado de objeto que são vários necesário para a criação de um objeto JFrame ou outro qualquer componente swing, se ganha em peformance e agilidade na visibilidade.

Dá uma olhada no Java Doc das classes e se tiver a oportunidade de conseguir o livro: The JFC Swing Tutorial Second Edition irá conferir o tem escrito lá.
Não é uma ordem mas um conselho que o pessoal da SUN dá!
Afinal cada componente tem sua finalidade e uso adequado.

Não sei que outros recursos são esses que o JFrame tem e o JDialog não tem (poderia exemplificar?), mas se você quer um form modal, JFrame não é adequado.

Um exemplo já que pediu: em um JDialog você pode adicionar paletas melhor que um JFrame; pois o componete foi desenvolvido para isso assim como o JTree foi pra árvores e etc.


Não cara, JInternalFrame é adequado para MDI. Não há nenhum problema em criar “cadastros, pesquisas, pesquisas para relatórios” e etc usando JInternalFrame, desde que o que seu cliente deseje seja uma interface com várias janelas abertas dentro de uma janela principal.

Concordo com o que quis dizer acima, eu não falei que seria um problema mas uma recomendação; questão de estética, tendo em vista várias aplicações desenvolvidas no mercado, é incomum o uso de janelas internas para CRUD`s, Relatórios, Gráficos e etc, esse costume desta forma era para os programas desenvolvidos na 2 geração por limitação e outro motivos, mas se for observar pelo mercado a grande maioria dos programas de terceira ou até mesmo quarta geração considerando Aspectos com esse status vai notar que não é comum usar Janelas internas.

Espero ter respondido as dúvidas.

Outra coisa boa que você pode fazer é explorar herança visual.

Tipo botões como fechar, cancelar, entre outros geralmente a implementação deles costumam a ser iguais para todo o sistema então ao invés de criar isso toda vez para cada tela, os componentes e os eventos implementados no pai podem ser herdados para qualquer um mão na roda isso agiliza muito o desenvolvimento.

Copiei esse conceito do Delphi 3 onde primeiro vi isso, alias pessoal que fez primeira IDE pra programas.

OBS: Ainda não existe uma IDE para java que interaja tão bem com herança visual como o Delphi; entao ao fazer isso terá que usar o setLocation() ou setSize() do componete para onde se é desejado o posicionamento da quele componete e aplicar um repinte que fica tudo no lugar.

No Delphi o componente herdado pode ser arrastado ou redimensionado mas IDE java não funciona ainda só nos resta espera para a evolução do Maiven para isso acontecer.