como ter apenas uma instancia em varias telas???[RESOLVIDO]  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
RaphaelSantos
JavaGuru

Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline

Pessoal, meu programa tem 2 telas...
a primeira principal que é um JDialoge uma segunda que é um JDialogtambem...
a segunda tela é uma tela que contem um JList que contem o nome de arquvos anexados (escolhidos atraves do JFileChooser)... ate ai tudo bem, meu programa roda normal...
criei uma variavel singleton na tela principal, de forma que a segunda tela passe para a primeira tela o arquivo anexado...
quando o usuario clica em fechar na segunda tela(coloquei um evento actionPerformed no botao FECHAR seguido da instrução dispose()

ai se ainda na mesma tela o usuario entrar de novo na tela de anexos, a tela esta vazia(claro, eu chamo a tela pela instrução )

onde ele cria uma nova instancia da classe...
entao minha pergunta é... como chamar a segunda tela varias vezes e ele continua do jeito que estava antes de ser fechada???

ps.: tentei criar, na segunda tela, a variavel estatica singleton pela instrução

e na tela principal ao inves de eu chamar a tela pelo new AttachmentGUI() eu tava usando AttachmentGUI.getInstance();
porem ele abre a primeira vez normal, porem ao fechar e tentar abrir, nada acontece...nem da mensagem de erro nem abre nada...
alguem sabe como devo proceder???


aproveitando o embalo, pq meu JDialog nao mostra nem botao minimizar nem aparece na barra de tarefas do windows???
RaphaelSantos
JavaGuru

Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline

ngm help? :'(
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

Ola,

O forum funciona na base da boa vontade.

A um problema na arquitetura do seu sistema pois a 1a tela deveria ser um JFrame e a 2a um JDialog.

Voce nao criou uma variavel Singleton voce usou esse pattern(padrao) pra resolver esse seu problema.

Nao estou vendo a necessidade de ele ser um singleton neste caso, pode me explicar porque da escolha do pattern e qual o problema que estava ocorrendo para optar por ele ?

Ate mais.

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
JavaBasic
What is classpath?

Membro desde: 03/07/2007 03:27:22
Mensagens: 7
Offline

keller wrote:Ola,

O forum funciona na base da boa vontade.

A um problema na arquitetura do seu sistema pois a 1a tela deveria ser um JFrame e a 2a um JDialog.

Voce nao criou uma variavel Singleton voce usou esse pattern(padrao) pra resolver esse seu problema.

Nao estou vendo a necessidade de ele ser um singleton neste caso, pode me explicar porque da escolha do pattern e qual o problema que estava ocorrendo para optar por ele ?

Ate mais.

bom, vamos por parte...
creio eu.. pelo menos eu penso que nao... o fato da primeira tela ser JDialog ao invez de JFrame, nao influe no meu problema..
usei o Pattern singleton para ter acesso aos metdos de tela01 a tela 02 e da tela02 a tela01...por exemplo...o arquivo anexado na tela02, tem que ser passado para a tela01 para qdo o botao ENVIAR ser pressionado, ele enviar o anexo...eu criando apenas um metodo public na tela 01.. e instanciando a tela01 dentro da tela02(para poder acessar o metodo de tela01), meu programa ia ficar abrindo varias tela01... entao usando o singleton, eu garanto que isso nao acontece...

qdo eu abro o botao anexo, o comando new é feito a tela 02 abre normal.. qdo eu fecho, o anexo vem para tela01normal... porem se eu retornar a apertar no botao anexo, ele abre uma nova instancia da tela02 e o JDialog que deveria mostrar com os anexos anteriores, aparece vazio(como disse, normal, afinalé uma nova instancia)..
entao o que eu queria era abrir apenas uma instancia da tela02(ao abrri a primeira vez ele cria e nao cria mais.. sempre que eu clica em anexo, ele chama o ja entao criado tela02)
entao queria saber como eu poderia fazer isso??
ta certo em chaamr a tela 02 por new Tela02(); dentro da tela01???
ta certo eu fechar a tela 02 com o comando dispose(); ???
caso positivo, entao o que deve ser feito para contornar meu problema??
caso negativo, quais comando de chamada de tela02 ou encerramento da mesma, de forma que toda vez que eu entrar na tela02 sempre mostre o conteudo da mesma...

nao sei se esclareceu ou dificultou mais ainda.. mas qualquer coisa é só falar
agradeço a ajuda de todos.
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

JavaBasic wrote:
creio eu.. pelo menos eu penso que nao... o fato da primeira tela ser JDialog ao invez de JFrame, nao influe no meu problema..


??? wrote:
aproveitando o embalo, pq meu JDialog nao mostra nem botao minimizar nem aparece na barra de tarefas do windows???


Porque e um JDialog. Faca um teste com JFrame.

JavaBasic wrote:
usei o Pattern singleton para ter acesso aos metdos de tela01 a tela 02 e da tela02 a tela01...por exemplo...o arquivo anexado na tela02, tem que ser passado para a tela01 para qdo o botao ENVIAR ser pressionado, ele enviar o anexo...eu criando apenas um metodo public na tela 01.. e instanciando a tela01 dentro da tela02(para poder acessar o metodo de tela01), meu programa ia ficar abrindo varias tela01... entao usando o singleton, eu garanto que isso nao acontece...

qdo eu abro o botao anexo, o comando new é feito a tela 02 abre normal.. qdo eu fecho, o anexo vem para tela01normal... porem se eu retornar a apertar no botao anexo, ele abre uma nova instancia da tela02 e o JDialog que deveria mostrar com os anexos anteriores, aparece vazio(como disse, normal, afinalé uma nova instancia)..
entao o que eu queria era abrir apenas uma instancia da tela02(ao abrri a primeira vez ele cria e nao cria mais.. sempre que eu clica em anexo, ele chama o ja entao criado tela02)
entao queria saber como eu poderia fazer isso??


Voce poderia passar o objeto tela01 para o tela02 e no tela02 invocar o metodo da tela01, quando fechar a tela02 setar o tela02 no tela01.

JavaBasic wrote:
ta certo em chaamr a tela 02 por new Tela02(); dentro da tela01???

Sim, mas voce tambem poderia usar um Container IoC+DI pra fazer isso. ( mas fica como dever de casa.. ) [ dica: PicoContainer ]

JavaBasic wrote:
ta certo eu fechar a tela 02 com o comando dispose(); ???

Sim se tela02 for JDialog.

JavaBasic wrote:
caso positivo, entao o que deve ser feito para contornar meu problema??
caso negativo, quais comando de chamada de tela02 ou encerramento da mesma, de forma que toda vez que eu entrar na tela02 sempre mostre o conteudo da mesma...

Ja respondi..

JavaBasic wrote:
nao sei se esclareceu ou dificultou mais ainda.. mas qualquer coisa é só falar
agradeço a ajuda de todos.


De nada.

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
JavaBasic
What is classpath?

Membro desde: 03/07/2007 03:27:22
Mensagens: 7
Offline

keller wrote:
JavaBasic wrote:
creio eu.. pelo menos eu penso que nao... o fato da primeira tela ser JDialog ao invez de JFrame, nao influe no meu problema..


??? wrote:
aproveitando o embalo, pq meu JDialog nao mostra nem botao minimizar nem aparece na barra de tarefas do windows???


Porque e um JDialog. Faca um teste com JFrame.

JavaBasic wrote:
usei o Pattern singleton para ter acesso aos metdos de tela01 a tela 02 e da tela02 a tela01...por exemplo...o arquivo anexado na tela02, tem que ser passado para a tela01 para qdo o botao ENVIAR ser pressionado, ele enviar o anexo...eu criando apenas um metodo public na tela 01.. e instanciando a tela01 dentro da tela02(para poder acessar o metodo de tela01), meu programa ia ficar abrindo varias tela01... entao usando o singleton, eu garanto que isso nao acontece...

qdo eu abro o botao anexo, o comando new é feito a tela 02 abre normal.. qdo eu fecho, o anexo vem para tela01normal... porem se eu retornar a apertar no botao anexo, ele abre uma nova instancia da tela02 e o JDialog que deveria mostrar com os anexos anteriores, aparece vazio(como disse, normal, afinalé uma nova instancia)..
entao o que eu queria era abrir apenas uma instancia da tela02(ao abrri a primeira vez ele cria e nao cria mais.. sempre que eu clica em anexo, ele chama o ja entao criado tela02)
entao queria saber como eu poderia fazer isso??


Voce poderia passar o objeto tela01 para o tela02 e no tela02 invocar o metodo da tela01, quando fechar a tela02 setar o tela02 no tela01.

JavaBasic wrote:
ta certo em chaamr a tela 02 por new Tela02(); dentro da tela01???

Sim, mas voce tambem poderia usar um Container IoC+DI pra fazer isso. ( mas fica como dever de casa.. ) [ dica: PicoContainer ]

JavaBasic wrote:
ta certo eu fechar a tela 02 com o comando dispose(); ???

Sim se tela02 for JDialog.

JavaBasic wrote:
caso positivo, entao o que deve ser feito para contornar meu problema??
caso negativo, quais comando de chamada de tela02 ou encerramento da mesma, de forma que toda vez que eu entrar na tela02 sempre mostre o conteudo da mesma...

Ja respondi..

JavaBasic wrote:
nao sei se esclareceu ou dificultou mais ainda.. mas qualquer coisa é só falar
agradeço a ajuda de todos.


De nada.

bom keller, vamos la...
isso seria pra resolver o problema de eu passar os dados de tela02 para tela 01?? isso ja resolvi usando o singleton(embora pelo que vc disse nao devia ter sido usado, embora nao tenha entendido o pq)...
o que eu ainda nao entendi(se vc ja explicou, desculpa :oops é como nao perder minha primeira instancia de tela02 ja criada(ou é impossivel e toda vez que eu chamar tela02 eu tenho que setar novamente minha JList nessa ida e volta de dados???)

Sim, mas voce tambem poderia usar um Container IoC+DI pra fazer isso. ( mas fica como dever de casa.. ) [ dica: PicoContainer ]
o que seria esse container IoC+DI??? poderia dizer o nome dele e o que isso faz exatamente??? procuro na net por esse nome IoC+DI mesmo???

no mais, agradeço novamente...
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

JavaBasic wrote:
Isso seria pra resolver o problema de eu passar os dados de tela02 para tela 01?? isso ja resolvi usando o singleton(embora pelo que vc disse nao devia ter sido usado, embora nao tenha entendido o pq)...
o que eu ainda nao entendi(se vc ja explicou, desculpa :oops é como nao perder minha primeira instancia de tela02 ja criada(ou é impossivel e toda vez que eu chamar tela02 eu tenho que setar novamente minha JList nessa ida e volta de dados???)


Ok vamos com codigos quem sabe fica mais visivel a solucao:




JavaBasic wrote:
O que seria esse container IoC+DI??? poderia dizer o nome dele e o que isso faz exatamente??? procuro na net por esse nome IoC+DI mesmo???

Leu a dica? PicoContainer, tem um tutorial no GUJ e uma abordagem que pode ser utilizada com MVC.
Caso interesse de uma olhada no binding de dados do Genesis que tambem e muito bom.

Hoje o projeto aqui conta com esses frameworks:
Genesis ( binding )
JGoodies ( validation )
PicoContainer ( ioc+di )
Commons-Logging ( log api )
SwingLabs ( components )

Mas ai e questao de necessidade e escolha..
Boa sorte!

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
RaphaelSantos
JavaGuru

Membro desde: 05/11/2006 02:51:13
Mensagens: 201
Offline

keller wrote:
JavaBasic wrote:
Isso seria pra resolver o problema de eu passar os dados de tela02 para tela 01?? isso ja resolvi usando o singleton(embora pelo que vc disse nao devia ter sido usado, embora nao tenha entendido o pq)...
o que eu ainda nao entendi(se vc ja explicou, desculpa :oops é como nao perder minha primeira instancia de tela02 ja criada(ou é impossivel e toda vez que eu chamar tela02 eu tenho que setar novamente minha JList nessa ida e volta de dados???)


Ok vamos com codigos quem sabe fica mais visivel a solucao:




JavaBasic wrote:
O que seria esse container IoC+DI??? poderia dizer o nome dele e o que isso faz exatamente??? procuro na net por esse nome IoC+DI mesmo???

Leu a dica? PicoContainer, tem um tutorial no GUJ e uma abordagem que pode ser utilizada com MVC.
Caso interesse de uma olhada no binding de dados do Genesis que tambem e muito bom.

Hoje o projeto aqui conta com esses frameworks:
Genesis ( binding )
JGoodies ( validation )
PicoContainer ( ioc+di )
Commons-Logging ( log api )
SwingLabs ( components )

Mas ai e questao de necessidade e escolha..
Boa sorte!

vlw keller, funcionou normal agora
a diferença era que qdo eu iniciava a primeira vez a tela02, ao fechar, ele reabria de novo...eu resolvi esse problema colocando um else apos o if ficando

e funcionou perfeito
essa parte eu nao coloquei pq eu nao sei o que seria esse setTela01(this)... eu uso o eclipse e o visual editor dele, ai ele gera os codigos diferentes(o VE do eclipse).. mas mesmo sem o this.tela02.setTela01(this); ta funcionando perfeito..
vlw

quanto ao IoC vou da uma olhada sim.
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

RaphaelSantos wrote:
quanto ao IoC vou da uma olhada sim.


De uma olhada nos frameworks que eu citei eles ajudam bastante na construcao de uma aplicacao desktop.

Boa sorte!

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team