Abrir Janela Mais de uma vez

6 respostas
T

Tenho o seguinte problema tem uma classe menu que chama um JFrame1 e esse abre um JFrame2 que por cinal abre o JFrame1 novamente.

O que eu preciso é que quando eu chame o mesmo frame ele de somente um setvisible true e não crie uma nova tela.
Se precisar do meu código para entender melhor somente me solicitar que eu posto
Obrigado pela atenção.

6 Respostas

Poneis123

posta o código ae =D

julianofischer

abstrata forma de se comunicar!

T
public class JMenu extends javax.swing.JFrame {

    public static Sessao sessao;

    /** Creates new form JMenu */
    public JMenu() {
        initComponents();
    }

   ...

private void jMenuItem_ProcessoEntradaActionPerformed(java.awt.event.ActionEvent evt) {                                                          
        JProcessoEntrada jProcessoEntrada = new JProcessoEntrada();
        jProcessoEntrada.setVisible(true);
        jProcessoEntrada.setDefaultCloseOperation(jProcessoEntrada.DISPOSE_ON_CLOSE);
    }  

...
}
public class JProcessoEntrada extends javax.swing.JFrame {

    /** Creates new form JProcessoEntrada */
    public JProcessoEntrada() {
        initComponents();
        pesquisar();
        controleCampos();
    }

...

    private void abreOrcamento(Integer idOrcamento) throws Exception{
        JOrcamento jOrcamento = new JOrcamento();
        jOrcamento.populaCampos(idOrcamento);
        jOrcamento.setVisible(true);
        jOrcamento.setDefaultCloseOperation(jOrcamento.DISPOSE_ON_CLOSE);
    }

...
}
public class JOrcamento extends javax.swing.JFrame {

    /** Creates new form JOrcamento */
    public JOrcamento() {
        initComponents();
        pesquisar();
        controleCampos();
    }

...

    private void abrirProcessoentrada(){
        try {
            Integer idProcessoEntrada = new Integer(jTextField_ID_ProcEntrada.getText());
            JProcessoEntrada jProcessoEntrada = new JProcessoEntrada();
            jProcessoEntrada.populaCampos(idProcessoEntrada);
            jProcessoEntrada.setVisible(true);
            jProcessoEntrada.setDefaultCloseOperation(jProcessoEntrada.DISPOSE_ON_CLOSE);
        } catch (Exception ex) {
            JLog.log(ex);
            JOptionPane.showMessageDialog(this, ex.getMessage(), "Erro: ", JOptionPane.ERROR_MESSAGE);
        }
    }

...

}

Como podem ver eu vou da tela de processo de entrada para o orçamento e vice versa o problema é que cada vez abre uma nova tela e ficam v[code]árias repetidas queria que ele somente desse o setvisible true para as telas algo parecido.
obrigado.

julianofischer

Uma solução:

Armazenar uma referência a JProcessoEntrada em JMenu uma referência a JMenu em JProcessoEntrada.
Você inicia com JMenu, e muda o código para:

if(this.referenciaParaJProcessoEntrada==null){

     referenciaParaJProcessoEntrada = new JProcessoEntrada(this); //aqui vc passa o JMenu por parâmetro.
}

Faz o mesmo esquema no JProcessoEntrada, mas com o JMenu!
abraços

R

Quando eu chamo o frame utilizo o codigo abaixo

Clientes telacli;
    private void telacliente(){
        if (telacli == null) {
            telacli = new Clientes();
            telacli.setVisible(true);
        } else {
            telacli.setVisible(true);
            telacli.setState(JFrame.NORMAL);
        }
    }
T

Muito Obrigado fiz o seguinte.

Na classe JMenu criei metodos públicos que verificam se esta aberto só da set visible true caso contrario cria o objeto e abro as telas jogando o JMunu como parametro
e nas classes JProcesso entrada e orçamento chamo as telas através dos metodos do jmenu.

Obrigado pela ajuda pessoal

Criado 18 de março de 2010
Ultima resposta 19 de mar. de 2010
Respostas 6
Participantes 4