GARANTIR DESCONTO

Fórum fechar tela swing [RESOLVIDO] #569375

04/01/2012

0

Tenho uma classe que retorna uma lista, mas antes precisa chamar uma classe que constrói um frame, o qual mostrará os dados da lista numa caixa swing. Isso tudo está ocorrendo perfeitamente, mas preciso rodar a primeira classe periodicamente e cada vez que o frame , antes desse tal frame ser apresentado, deve fechar o que abriu na tela na vez anterior que ela rodou. Tem como ? Obrigado.
Jones Chagas

Jones Chagas

Responder

Posts

04/01/2012

Douglas Eric

não entendi nada, mas para fechar um JFrame use o método
jFrame.dispose();
[i]also..[/i] talvez você possa aprender um pouco com esse tópico http://javafree.uol.com.br/topic-882403-FAQ-JFrame.html
Responder

Gostei + 0

04/01/2012

Jones Chagas

[quote="sekkuar"]não entendi nada, mas para fechar um JFrame use o método
jFrame.dispose();
[i]also..[/i] talvez você possa aprender um pouco com esse tópico http://javafree.uol.com.br/topic-882403-FAQ-JFrame.html
Obrigado pela dica Skkuar. Na verdade estava usando este método mas ele não funcionava, pois na verdade eu não queria apagar minha tela atual e sim a anterior. Não sei se há um método mais rápido de se fazer isso, maso que fiz foi chamar minha classe swing à partir de outra classe, instanciando o um JFrame e antes de abrir o frame seguinte dou um dispose no frame anterior. Achei uma solução meio nas coxas, mas por eqto é a que está dando certo.
Responder

Gostei + 0

04/01/2012

Douglas Eric

é tudo questão de referencia. se você quer fechar "a janela anterior", então você precisa de uma variável de referencia para a tal janela em questão. de uma lida nesse link que eu passei, especialmente em "como passar um argumento de uma JFrame para outra JFrame"
Responder

Gostei + 0

04/01/2012

World Java

[quote="wjava"][quote="sekkuar"]não entendi nada, mas para fechar um JFrame use o método
jFrame.dispose();
[i]also..[/i] talvez você possa aprender um pouco com esse tópico http://javafree.uol.com.br/topic-882403-FAQ-JFrame.html
Obrigado pela dica Skkuar. Na verdade estava usando este método mas ele não funcionava, pois na verdade eu não queria apagar minha tela atual e sim a anterior. Não sei se há um método mais rápido de se fazer isso, maso que fiz foi chamar minha classe swing à partir de outra classe, instanciando o um JFrame e antes de abrir o frame seguinte dou um dispose no frame anterior. Achei uma solução meio nas coxas, mas por eqto é a que está dando certo.
Bem, basicamente vc pode usar 2 técnicas nisso, uma acoplar outra usar listeners(prefiro essa). Acoplando vc passa uma tela para outra veja.
public class JFrame1 extends JFrame{
      //aqui seu construtor etc e tals.

      private void btnAbreDialogActionPerformed(ActionEvent e){
           new JDialog1(this, true).setVisible(true);
      } 
}

public class JDialog1 extends JDialog{
     private JFrame1 frame1; //aqui vai acontecer o acoplamento

     public void setJFrame1(JFrame1 frame){
          //aqui define-se o acoplamento
          this.frame1 = frame; //agora vc pode usar tudo o que for public de frame 1 em frame 2
     }
}

Usando a técnica de Listener uma classe fica independente da outra, uma não precisa saber o que a outra faz basta vc adiciona-la como ouvinte da que vc quer abrir, eh um pouco mais trabalhoso a principio e a primeira vista mas bem mais funcional pq vc não fica acoplando telas/classes e ainda o melhor uma não precisa saber o que a outra faz para funcionar. veja.
public class JFrame1 extends JFrame implements ConsultaJFrame1Listener{
      //aqui seu construtor etc e tals.
      private void btnAbreDialogActionPerformed(ActionEvent e){
             JDialog1 dialog = new JDialog1(this, true);
             dialog.addListener(this); //aqui adiciono a tela como ouvinte
             dialog.setVisible(true);             
      } 

      //aqui a implementacao q retorna do listener
     public void JFrame1Selecionada(ConsultaJFrame1Event e) {
               System.out.println(e.getCliente());
    }
}



public class JDialog1 extends JDialog{
       //construtor etc..

/**
     * define listeners para retorno de informacoes desta classe     * 
     */    
    //lista de ouvintes
    private ArrayList<JFrame1> listeners = new ArrayList<JFrame1>();
        
    //retorna codigo do ouvinte
    public interface ConsultaJFrame1Event{
        public List<JFrame1> informacoesConsulta();
    }
    
    //pega o codigo do q esta no JFrame1
    public interface ConsultaJFrame1Listener{
        public void jframe1Selecionado(ConsultaJFrame1Event e);
    }
    
    //adiciona ouvinte
    public void addListener(ConsultaJFrame1Listener listener){
        if(!listeners.contains(listener)){
            listeners.add(listener);
        }
        
    }
    
    //remove ouvinte
    public void removeListener(ConsultaJFrame1Listener listener){
        listeners.remove(listener);
    }
    
    //notifica ouvinte
    private void notifyListeners(final List lista){
        ConsultaJFrame1Event evt = new ConsultaJFrame1Event() {
            @Override
            public List informacoesConsulta() {                
                return lista;
            }
        };
        for(ConsultaJFrame1Listener list : listeners) {
           list.JFrame1Selecionada(evt);
       }
    }
    //fecha listener

    private void btnSalvarActionPerformed(ActionEvent e){
          JFrame1.save(Cliente por exemplo);
          notifyListeners(listaDeClientes); //pronto aqui ja faz todo o processo de retorno ou aviso de tela
          this.dispose();
    }

}
Veja a a diferença, com acoplamento vc precisa ficar passando uma tela para outra, ja com lista de ouvintes não, basta vc adicionar a propria tela como um ouvinte q ela vai receber e retornar a informacao. t+ e boa sorte.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar