tenho um software de um jogo de perguntas e respostas. Só que para a exibição de uma pergunta para a outra, após o usuário responder a pergunta, minha janela fecha, no caso é destruída ( this.dispose(); ) e abre, ou melhor, é reconstruída d novo ( new NewJFrame().setVisible(true); )
Queria fazer com que esse meu JFrame ñ se destruísse, e reconstruísse novamente, qria apenas q ele atualizasse os campos da pergunta e das alternativas (q no caso são jTextPane, 5 ao todo).
Ouvi falar nos métodos removeAll(); validate(); e repaint(); mas ñ sei se testei d forma errada, ou é pq ñ sei usa-los, q ñ funcionáriam do jeito q eu precisava…
Vcs teriam como me ajudar? qria saber se são esses métodos q devo usar, para q serve e como se usa cada uma deles…
É o seguinte só para lembrar alguns conceitos de heranca a Hierarquia das classe graficas da java é a seguinte ( Componet->Container->JComponet-> JPanel( exemplo ) ).
o metodo repaint pertence a classe Component , esse metodo é ultilizado para atualizar os componentes visuais de um formulario por exemplo. quando o metodo repaint é
invocado explicitamente quer dizer que o painel( JFrame, JPanel) deve ser atualizado na tela o mais rapido possivel ou seja os componentes. O metodo validate() é da classe Container ele
ele recalcula o layout do container( JFrame ) com base no gerenciador de layout atual para o container e o cunjunto atual de componentes GUI exibidos. O metodo removeAll() é um pouco mais complicado e creio que não é necessario voçe ultilizalo no seu software.
Uma solução Legal seria a seguinte ex1:
Voce poderia cria um classe principal FormPrin ( JFrame ) e a forma como os componentes seriam organizados seria como um baralho toda vez que fosse para uma nova pergunta
um formulario dentro do principal se abriria com os componentes adequando aquela pergunta.
Uma solução Legal seria a seguinte ex2:
Voce poderia cria um classe principal FormPrin ( JFrame ) a cada nova pergunta o formulario mostraria a questao( JLabel ) e as alternativas (JTextPanel, JRadioButton) .Quando Fosse
para a nova pergunta o metodo repaint() poderia ser ultilizado para mostrar os novos componentes, é claro que vc deve destruir os componentes antigos.
Uma solução Legal seria a seguinte ex3:
Posta seu codigo aki e fazemos as correções…
Uma solução Legal seria a seguinte ex4:
Postar exemplos de codigos.
Então Henrique, gostei do seu segundo exemplo, seria o mais ideal para ser alterado no software, só q é o seguinte:
eu ñ tenho várias perguntas e rspostas “sobrepostas” em componentes gráficos… todos essas dados, como pergunta, alternativas, e a resposta correta, vem do banco de dados (mysql)…
então, qndo me referi em atualizar os cmponentes, me refiro ao conteúdo deles, q eles buscam do banco de dados, mas realizando isso sem destruir e reconstruir minha janela…
Você poderia estar apenas setando as questões e alternativas recuperados do banco nos componentes a cada rodada, e fazendo o controle da alternativa coreta atraves de um metodo que relaciona, por exemplo, o JRadioButton selecionado com a alternatica correta recuperada do banco fazendo uso de estrutura de condição If ou Case.
Acho que a melhor saida seria utilizar um Layout de Cartas/Cartao (CardLayout). Esse é o mesmo modelo de uma instalação de um Software comum.
Outra opção, seria na ação do seu botão de confirmação da pergunta, alterar o conteudo das variaveis e dar um repaint.
Algo como:
[code]// Botão de confirmação da sua pergunta.
botao.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
// Mudaria o label da pergunta
// OBS: Esse label deve ser utilizado SEMPRE que você for fazer uma pergunta ao usuário.
label_pergunta = new JLabel("PERGUNTA_DO_BANCO");
// Atualiza a janela de perguntas.
frame.repaint();
}
}
);[/code]