tente dar um revalidate() no componente que foi atualizado.
Se ainda não der, tente talvez dar um repaint no frame (mas o revalidate deve funcionar)
paulofernandesjr
nada!
nem repaint() no label
nem revalidate() no label
nem updateUI() no label
ViniGodoy
Onde vc chama o método calculaTotal()?
Não é necessário usar nenhum dos métodos citados acima após atualizar um JLabel. Ele faz isso automaticamente.
paulofernandesjr
ViniGodoy:
Onde vc chama o método calculaTotal()?
Não é necessário usar nenhum dos métodos citados acima após atualizar um JLabel. Ele faz isso automaticamente.
Eu chamo no meu frame principal
e ele não esta fazendo o novo setText(param); nao
ViniGodoy
Posta o código do seu frame aí, senão fica muito difícil te ajudar.
Se for muito grande, use a opção de attachments.
paulofernandesjr
O codigo é muito grande!
vou explicar melhor a situação
tenho um JFrame que abre um JDialog com um botao adicionar
quando o botão adicionar é clicado, uma linha é adicionada a tabela com itens e “deveria” recalcular o total!
porem não recalcula, mas se eu removo algum produto ele recalcula!
ficou mais claro
CrOnNoS
Assim não fica ainda mais necessário ver o código ?
Já tentou colocar uns “printf” por exemplo para verificar se o problema realmente está no método que você mostrou ?
Se ele funciona em um caso provavelmente deveria funcionar em outro semelhante.
paulofernandesjr
estou tentando ver mais algumas coisas aqui
se não der certo ai posto o código
ViniGodoy
Infelizmente, deixei minha bola de cristal em casa.
paulofernandesjr
calma ai estou tentando mais algumas coisas aqui, já posto o código caso não resolva?
qual a melhor forma de postar, zipando o projeto todo, ou colocando somente as classes?
paulofernandesjr
Consegui
o meu problema era que quando o JDialog era criado, lá dentro eu instanciava o construtor do principal, foi só colocar os elementos envolvidos como static que deu certo
obrigado por tudo
abraço
Ironlynx
Que bom ter resolvido, só uma dica: quando um código for grande demais para postar com as tags code, vc pode zipá-lo e postar como anexo, como o limite para esse zip e de 500KB, dificilmente vc chegará perto de estourá-lo(500KB só de .java zipado é código que não acaba mais…)
ViniGodoy
Opa, colocar coisas como static dificilmente é uma boa solução. E geralmente, vai te gerar mais transtorno do que benefício.
Você acabou de corrigir um problema e introduzir outro, muito pior.
paulofernandesjr
Opa, colocar coisas como static dificilmente é uma boa solução. E geralmente, vai te gerar mais transtorno do que benefício.
Você acabou de corrigir um problema e introduzir outro, muito pior.
Não concordo ViniGodoy, se o atributo static existe é para ser usado e no meu caso creio que foi a melhor alternativa
mesmo assim, obrigado pela dica
ViniGodoy
Boa sorte…
Só alguns motivos para você não usar static:
Ele é um dos grandes focos geradores de memory leaks. Variáveis estáticas nunca perdem escopo, portanto, você deve defini-las explicitamente para null, ou nunca serão coletadas. Isso é especialmente problemático em interfaces gráficas, onde uma variável costuma a referenciar dezenas de objetos;
É mais difícil torna-las thread-safe. Na verdade, a presença de statics pode gerar código thread-hostile, ou seja, código que nem com sincronização resolve-se o problema;
Variáveis estáticas comportam-se como variáveis globais. Tendem a tornar o sistema instável, já que podem ser usadas de qualquer ponto.
Código static costuma a se comportar como código estruturado, não orientado a objetos.
Tente entender o porque de ter usado o modificador static resolveu o problema. Programar por tentativa e erro dificilmente é uma boa solução.
Provavelmente, você estava acessando a variável errada, ou faltava passar alguma coisa por parâmetro. Mas há, certamente, alternativas melhores que o uso de statics.
Não é pq o recurso existe que é bom usa-lo. Podemos citar centenas de exemplos na programação onde recursos foram considerados más práticas. O uso indiscriminado de static é um deles.
paulofernandesjr
Vamos lá!
Tenho uma tela com botões e esses botões abrem uma nova janela!
Como atualizar a janela “pai” com o evento do click na janela “filho”.
Eu não conheço nenhuma alternativa sem ser o static, você conseguiu entender a situação, tem alguma idéia para propor?
abraço
ViniGodoy
Sim, algumas alternativas:
Passe os objetos do pai como parâmetro para o filho.
Faça o filho gerar um evento. Ouça esse evento no pai;
A que geralmente uso caso o filho seja modal:
3. Crie getters() no filho. Depois leia os getters no pai.
paulofernandesjr
o que você quer dizer com que caso o filho seja modal??
ViniGodoy
Uma JDialog pode ser tornada modal.
Isso significa que, após aberta, o usuário não poderá clicar em outras janelas até que ela seja fechada. Ela também fica sempre acima da janela que a criou.
Outra diferença é que, diferente das janelas não modais, o código do pai é interrompido na linha do setVisible(true), até que a dialog modal seja fechada.
Basicamente, é com janelas modais que você implementa um comportamento similar ao do JOptionPane.
Para criar uma janela modal, você deve estender de JDialog ao invés de JFrame. Aí vc tem a opção de chamar setModal(true); ou de chamar o construtor passando true no último parâmetro: super(this, true);
paulofernandesjr
é dessa forma mesmo que eu estou fazendo…
ViniGodoy
Então crie os gets dos valores na sua JDialog (janela filha) e chame-os a partir da janela pai.
publicclassJanelaFilhaextendsJDialog{privatebooleanconfirmou=false;//Mude para true se o usuário pressionar o botão de ok//Aqui vai o código de desenho da tela.publicStringgetNome(){returntxtNome().getText();}publicintgetIdade(){returnInteger.parseInt(txtIdade().getText());}publicbooleanisConfirmou(){returnconfirmou;}}publicclassJanelaPaiextendsJFrame{//Código de desenho, etc, etc, etc...publicvoidaoClicarNoBotao(){JanelaFilhajf=newJanelaFilha();jf.setModal(true);jf.setVisible(true);if(!jf.isConfirmou())return;//Atualiza os campos do paitxtNomeUsuario.setText(jf.getNome());txtIdadeUsuario.setText(jf.getNome());}}
A desvantagem de usar static nesse caso é obvia. Ele impede o reaproveitamento da janela filha em outras janelas pai. Dessa forma que estou indicando, o filho fica completamente desacoplado do pai, podendo ser reusado. É muito comum que JDialogs sejam mais genéricas. Por exemplo, você pode fazer uma Dialog para pesquisa de um objeto, e usar ela em diversas janelas que dependem da escolha daquele objeto.