Olá, sou novo aqui no fórum e também na programação em Java.
Basicamente, eu tenho um JFrame que possui várias imagens, e uma delas é uma espécie de barra de status.
A imagem dessa barra muda cada vez que o status abaixa, por assim dizer.
Porém, eu preciso que essa imagem seja atualizada frequentemente, e o que está me causando dificuldades é que eu chamo o método de atualizar de uma outra classe.
Estou tentando com comandos tipo: this.repaint(), this.dispose() e etc, mas o eclipse aponta erro e diz que não posso usar this em um método estático, e como chamo ele de outra classe, ele precisa ser estático (pelo menos eu acho…).
Alguém pode me dar uma força sobre como atualizar um JFrame?
PS.: Já usei um new JFrame(), funcionou, porém foram sendo criados infinitos JFrames conforme atualizava. E não consegui fechar os anteriores pois precisava usar o this ;-;
(Não sei se o post está no lugar certo, ainda não entendi mto bem o funcionamento do site)…
Obrigado por responder,
basicamente, eu estou utilizando o mesmo principio dele, só que não consigo utilizar o repaint(); que ele usa… pq no meu caso estou tentando usar ele numa função estática. Estou tentando modificar aqui, obrigado ^^
public class TelaPrincipal extends JFrame{
public TelaPrincipal(){
super();
//O initialize faz as coisas como setar tamanho, colocar o JPanel e o setvisible(true);//
initialize();
}
Aqui é onde eu queria fazer meu método de atualizar:
public static void atualizaPainelPrincipal(){
repaint();
//this.dispose(); (nao funciona)
//não consigo usar o this, nem o repaint aqui
}
E aqui é de onde eu queria mandar atualizar, que está em outra classe.
public void abaixaStatus(){
//esse metodo acontece de tempo em tempo, conforme um timer
int StatusAtual = GerenciaArquivos_Interacao.getInstance().getStatusArquivo();
int StatusMod = StatusAtual-5;
GerenciaArquivos_Interacao.getInstance().gravaStatusArquivo(StatusMod);
GerenciaArquivos_Interacao.getInstance().modificaObjeto();
//Depois das modificações, mandaria atualizar a tela por aqui//
TelaPrincipal.atualizaPainelPrincipal();
}
Tentei refazer como você disse, utilizando um objeto instanciado do meu JFrame na classe em que quero pedir a atualização.
Só que por eu estar criando uma nova instancia dele nessa outra classe, toda vez que ele atualiza, aparece um novo JFrame. E assim ele vai criando um novo JFrame a cada atualização…
Esse método não deve ser estático pois ele deve atualizar o seu objeto e não a classe.
Então, primeiro passo: tira fora o static.
Quem é que instancia essa classe?
Essa classe deveria ter uma referência à intância de sua TelaPrincipal.
Outra coisa, evite ficar chamando várias vezes o mesmo método desnecessariamente, ao invés disso, crie uma variável local, além de ser mais legível, é mais rápido.
Exemplo:
public void abaixaStatus(){
GerenciaArquivos_Interacao gerenciador = GerenciaArquivos_Interacao.getInstance();
int statusAtual = gerenciador.getStatusArquivo();
int statusModificado = statusAtual - 5;
gerenciador.gravaStatusArquivo(statusModificado);
gerenciador.modificaObjeto();
objetoDaTelaPrincipal.atualizaPainelPrincipal();
}
Consegui entender o conceito a ser aplicado, vou fazer isso mais nos códigos (Fui olhar e fiz essa de chamar o método sem criar uma variável local várias vezes…)
O problema agora é que, criando a variável local referenciando a tela principal, quando ocorre a chamada da atualização, um novo Frame aparece. Ou seja, ficam abrindo infinitos Frames…
Onde eu poderia fazer essa referência sem instanciar infinitos frames?
PS: A classe que chama a atualização é instanciada pela classe GerenciaArquivos_Interacao
Obrigado, construí essa classe e organizei o código centralizando o acesso as telas. Pelo que percebi, agora só existe uma instância da tela principal durante todo o código ^^
Agora acredito que ficará mais fácil de tentar atualizar esse JFrame. Vou continuar buscando aqui alguma maneira de atualizá-lo.
Ainda não consegui fazer ele atualizar corretamente. Principalmente porque a aplicação se comporta de várias formas diferentes. Por exemplo, ela roda em segundo plano, e quando atualiza, ela volta a aparecer na tela. Ou então, simplesmente abre um JFrame a cada atualização. se alguém puder me dar uma ajuda sobre como atualizar a tela sem destruir a antiga e criar uma nova…