Eu tenho um único JLabel que é modificado constantemente e um único JFrame que se atualiza sem fechar. Porém depois de mudar os dados do JLabel eu preciso minimizar/maximizar/aumentar/diminuir a janela para o JFrame mudar.
Então eu quero que ao modificar o Jlabel o Jframe se atualize sozinho sem que eu tenha que minimizar/maximizar/aumentar/diminuir a janela para ele mudar. O código é esse aqui:
import javax.swing.*;
public class Interface {
static int A=0;
public void Tabuleiro(){
tabuleiro cupido = new tabuleiro();
JFrame frm = new JFrame("DAMAS");
JPanel pan = new JPanel();
JLabel lbl = new JLabel( cupido.campo() ); //campo() é um ImageICon
pan.add( lbl );
frm.getContentPane().add( pan );
frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frm.pack();
frm.setBounds(0, 0, 1100, 800);
Abrir(frm);
}
public void Abrir(JFrame batata){
if(Interface.A==0){
batata.setVisible(true);
A=1;
}
}
}
Eu chamo o Tabuleiro no main depois de atualizar o campo().
Explicando melhor o campo() é uma função de outra classe tabuleiro e é lá que eu modifico o Image Icon (imagem de um tabuleiro com peças).Eu desenho com awt. Graphics.
No main eu uso um método da classe tabuleiro para modificar a posição das peças e executo a função Tabuleiro() que está aí em cima.E faço isso toda vez que uma peça é modificada.
A função Abrir serve para o Jframe só se abrir na primeira vez que eu chamo o Tabuleiro() , eu já testei colocar frm.setVisible(true); no final de tabuleiro mas assim ele abre uma janela toda vez que eu chamo Tabuleiro() e eu não posso “apagar” as anteriores com dispose() ou frm.setVisible(false); pois eles não se referenciam aos anteriores.
Então estou pedindo uma solução para:
*Apagar as telas anteriores e só deixar a atual aberta ou
*Fazer com que o Jframe atualize sozinho ao modificar o cupido.campo(), pois desta maneira acima ele só se modifica se eu minimizar/maximizar/aumentar/diminuir a tela.
Eu já tentei fazer com que o Jframe minimize e maximize a tela automaticamente porém as funções só funcionam depois de exibir a janela, o que se torna inútil pois eu só exibo a janela uma vez.
Talvez o Jframe não atualiza direito porque a imagem anterior fica na frente da atual então já tentei dar repaint() e revalidate() mas não funcionou.Caso eu consiga eu postarei a resposta aqui.
Boa tarde amigo!
Bom, eu sou iniciante em Java e posso estar falando besteira, além de não ter como te montar um código de exemplo, visto que estou no trampo escrevendo do celular.De toda forma, já pensou em colocar um Time? Tipo um relógio. Quando estudava VB tive um projeto parecido em que eu precisava que o Formulário. (Jframe) atualiza-se continuamente ou após cliques. Aí coloquei um Time para rodar e parar de acordo com cliques de botões…
Não sei se esse é o seu caso, se for tem vários exemplos no próprio fórum.
Obrigado por responder, não é má ideia fazer com que o JFrame se atualiza-se a todo momento mas o problema seria como fazer a atualização eu não posso reapresentar o Jframe já que eu não terei como excluir o anterior, estou pensando em transformar o Jframe em array para assim ter uma referencia.
Eu crie uma solução que por algum motivo não funcionou. Criei dois Jframes em que um sempre vai ter às informações atuais e eu “excluo” o antigo porém não funcionou:
import javax.swing.*;
public class Interface {
----------static int A=0;
----------public void Tabuleiro(){
----------tabuleiro cupido = new tabuleiro();
----------JFrame frm = new JFrame();
----------JFrame frmbefore = new JFrame();
----------if(A==0){
--------------------frmbefore.setVisible(false);
--------------------JPanel pan = new JPanel();
--------------------JLabel lbl = new JLabel( cupido.campo() );
--------------------pan.add( lbl );
--------------------frm.getContentPane().add( pan );
--------------------frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
--------------------frm.pack();
--------------------frm.setBounds(0, 0, 1100, 800);
--------------------frm.setVisible(true);
----------}
----------if(A==1){
--------------------frm.setVisible(false);
--------------------JPanel pan = new JPanel();
--------------------JLabel lbl = new JLabel( cupido.campo() );
--------------------pan.add( lbl );
--------------------frmbefore.getContentPane().add( pan );
-----------------frmbefore.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
--------------------frmbefore.pack();
--------------------frmbefore.setBounds(0, 0, 1100, 800);
--------------------frmbefore.setVisible(true);
----------}
----------if(A==0){
--------------------A=1;
--------------------}else{
------------------------------A=0;
--------------------}
----------}
}
Não sei se entendi bem o seu problema, mas fiz um exemplo onde modifico um JLabel conforme os dados inseridos num JTextField. Dá uma olha pra ver se te serve.
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class App extends JFrame {
private JLabel label = new JLabel("Qual seu nome?");
private JLabel message = new JLabel();
private JTextField textField = new JTextField(25);
public App() {
textField.getDocument().addDocumentListener(new DocumentListener() {
@Override public void removeUpdate(DocumentEvent e) {}
@Override public void changedUpdate(DocumentEvent e) {}
@Override public void insertUpdate(DocumentEvent e) {
message.setText("Olá, " + textField.getText());
}
});
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
add(label);
add(textField);
add(message);
setVisible(true);
}
public static void main(String... args) {
new App();
}
}