iniciando minhas pesquisas sobre o Swing, qual a maneira correta de iniciar/mostrar/instanciar as janelas considerando a seguinte estrutura:
minhaApp.java: possui somente o metodo main que chama o menu
meuMenu.java: possui alguns jMenuItens com seu actionsListener’s
meuCad.java: possui alguns jTextFields pra teste e um jButton fechar
no Main da minhaApp usei:
meuMenu menu = new meuMenu(); menu.setVisible(true);
no ActionListner do menu usei:
if (meuCad==null){meuCad = new meuCad();}; meuCad.setVisible(true);
e no JButton fechar do meuCad usei:
this.setVisible(false);
É correto? qual a maneira correta de manipular uma aplicação’zinha com um menu principal e suas janelas?
Oi,
só não sei o que o dispose() tem haver com isso, pois a pergunta abordada é sobre abrir uma janela…
Então… seu setVisible(true) esta correto sim…
existem varias maneiras de abrilas e acredito que não faz diferença…
do tipo: show, setVisible, frame.show()… entre outras…
mas acredito que não implica diferença nenhuma…
acho que o keller quis dizer, é que existem tambem ‘n’ formas de fechar uma janela ou aplicações e que o correto depois de abrir cada “janelinha” você deve fecha-las dando um dispose() e não um System.exit(0); pois o system faz com que sua aplicação feche por inteiro… e não sómente a janela atual.
Tchauzin!
dooda
GUJ é demais!!!
Obrigado Lina e Keller, na verdade eram as as duas duvidas que eu tinha mesmo, como criar e como fechá-las…
Eu estava mesmo usando o System.exit(0); :shock:
e com o dispose(); funcionou da maneira esperada…
outra pequena duvida é que, quando crio ou seto visible para este frame, ele “cria” como se fosse uma nova na barra de tarefas do SO, é normal?
Algo que me preocupa (:oops: programo em delphi :oops: ) é que se uma aplicação tenha muitas janelas, como isso vai ficando na memória?
O garbage dá um jeito sozinho?
lina
Oi,
Então… você esta fazendo um programas com Menu… e quando você abre uma função do menu (tela) você deve estar chamando um JDialog ou um JFrame né?! o correto seria trabalhar com o JInternalFrame… sendo assim, o mesmo ficara dentro de sua aplicação principal e não sairá dali… e portanto, não vai ficar abrindo “caixas” na barra de tarefas…
hehe eu espero né =)
E tipo, para usar um JInternalFrame você deve trabalhar também com o JDesktopPane… de uma procurada melhor sobre isso! deve ter varios tópicos referentes a como usa-lo…
qualquer duvida, da um grito xD
Tchauzin!
keller
Ola,
Como a Lina ja falou de uma procurada sobre JDesktopPane e JInternalFrame. Esses componentes vao solucionar esse seu problema.
Se voce utilizar os metodos corretos para “fechar” a janela e nao simplesmente esconder voce nao precisa se preocupar com isso…
Boa sorte. :thumbup:
RaulCarlin
Na verdade, depois do Java 5 e agora com as melhorias do Java 6 o Swing está muito melhor tanto em relação à performance quanto à memória.
Pra quem programa muito em Swing e muitas vezes não usa thread, deve lembrar que quando a tela esperava o processamento de um método (tipo query no banco) que demora muito, ela não ficava renderizada caso uma outra janela ficasse por cima dela, ficava tudo cinza, com o desenho do desktop, coisas bem toscas. Hoje no 6 já tem um buffer muito bom, você pode até mudar o tamanho dela que ela fica renderizada bunitinha como no ultimo estado antes do método…
Pra mim hoje em dia Java não deve nada em relação à GUI desktop…
keller
Sim em questao de performance e interacao com o SO o Java 6 esta legal.
Isso pra min ja estava “resolvido” rodar o processo em uma thread e colocar uma JDialog(undecorated) na frente dizendo aguarde resolvia o problema…
Realmente voce pode ate desconsiderar a resposta anterior caso JRE6.
Continua sendo um pe no sa** trabalhar com Editors e Renderers pra fazer componentes em celulas das Tables e criando TableModel pra trabalhar com Pojos via reflexao (ok flexibilidade tem seu preco). Fora isso nao ha do que reclamar mesmo.
Houve mudancas na JavaCommAPI ? :roll:
Ate mais… :thumbup:
dooda
Total, total total!!
Vallew pessoal, é muito importante a ajuda de vocês… a cada resposta procuro ler mais sobre o que está sendo discutido…
mais o paradigma estruturado muito me persegue…
Obrigado…
ViniGodoy
É sempre o bom e velho trade off de memória vs. processamento.
Se você quiser deixar sua GUI rápida, e está disposto a sacrificar memória para isso, crie as janelas uma única vez e depois use apenas o setVisible(true) e setVisible(false). A janela invisível ocupa memória, mas torna-la visivel novamente é uma operação praticamente instantanea. Ela também mantém todos os dados digitados pelo usuário o que pode ou não ser uma vantagem, dependendo de como você estruturou suas telas.
Agora, se você tem pouca memória, ou suas janelas não pesam tanto assim, use o método dispose() e crie novas janelas com o new. Isso liberará a memória quase imediatamente, mas existe a necessidade de processar a sua criação toda vez que a janela for aberta. É a única opção válida também caso você queira abrir várias instâncias da mesma janela (ok, daria para fazer um pool de janelas e controlar o visible ou não, mas seria muita complexidade para pouco resultado).
ViniGodoy
Sim, aparentemente o suporte ao Windows foi silenciosamente abandonado…
keller
ViniGodoy:
Sim, aparentemente o suporte ao Windows foi silenciosamente abandonado…
Otimo agora tenho que escrever um “mini-sistema” e acessa-lo via JNI pra comunicar com as COMs no windows, ate ai tudo bem…
E depois pra reescrever pra *unix nao fica complicado? Alguem ja teve algum tipo de experiencia e pode dizer algo? O mesmo .so vale pra todos os *unix-like ?
dooda
Só mais uma dúvida grandes GujUser’s…
eu tenho, FrmModelo (abstract extend JFrame) e FrmCadastro (extend FrmModelo)…
no botao fechar do FrmCadastro estou usando o dipose(); ele ate está fechando a janela, mas quando chamo o cadastro novamente desta maneira:
if (cadTexto==null){
cadTexto = new fcdTexto();
};
cadTexto.setVisible(true);
ele sempre “ignora” a criação, setando visible e mostrando os dados digitados anteriormente nos JTextFields por exemplo…
Está correto?
(ps.: O FrmModelo tem setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)
Brigadu!!!
lina
Oi,
desculpa amigo, não entendi bem sua pergunta…
que tal colocar seu código?
assim, antes de postar códigos… coloque eles entre as barras:
Tchauzin!
keller
Sim, afinal a variavel “cadTexto”(que e um form) nao esta null.
Sendo ela uma variavel de instancia sempre guardara os valores nela.
Pelo menos ate o seu FrmCadastro ser fechado.
Boa sorte! :thumbup:
dooda
Lina:
que tal colocar seu código?
assim, antes de postar códigos… coloque eles entre as barras:
Tchauzin!
Desculpe-me Lina, já arrumei e não irá se repetir… :oops:
keller:
Sim, afinal a variavel “cadTexto”(que e um form) nao esta null.
Sendo ela uma variavel de instancia sempre guardara os valores nela.
Pelo menos ate o seu FrmCadastro ser fechado.
Boa sorte! :thumbup: