Abrir jDialog antes do jFrame principal

4 respostas
J

Bom dia,

Estou com uma dúvida, que acho ser simples, porém to meio perdido, fiz a interface gráfica do meu trabalho no netbeans, e ele gera o main com o método run automático que seta visible para meu jFrame principal (tudo funcionando).

 Porém preciso colocar um login (pensei em um jDialog com com login e senha, e  colocar pra visible meu jFrame principal se acertar usuário e senha), porém no método run (dentro do main) não consigo abrir meu jDialog antes de abrir o jFrame principal, tentei dar um setVisible true no jDialog antes de mostrar o principal mas nem deixa eu por o nome de meu dialog dentro do metodo run()...

 Descobri que variáveis que eu querer colocar dentro do run tem que ser static, pois meu método que valida o usuário retorna um boolean e eu estou testando o retorno do método para mostrar ou não o jFrame principal ( dentro do run() ), porém pra poder ter este retorno eu preciso primeiro abrir o jDialog pra preencher usuário e senha e validar....

Obrigado.
Jeferson

4 Respostas

Y

Tenta instanciar o JFrame da aplicação mas sem usar o “.setVisible(true);”, deixe que o JDialog faça isso quando o usuário acertar o login.

J
Yago Ernandes:
Tenta instanciar o JFrame da aplicação mas sem usar o ".setVisible(true);", deixe que o JDialog faça isso quando o usuário acertar o login.

Entendi, porém para fazer isso eu preciso do jDialog de login aberto, o que não estou conseguindo fazer :(, pois estava tentando abrir dentro do metodo run(), mas não ta dando certo, o que tenho é isso:

public static void main(String args[]) {
       
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                  new LeilaoGUI().setVisible(true);
            }
        });
e queria fazer algo como isso:
public static void main(String args[]) {
       
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                jDialogLogin.setVisible(true); //abre a tela de login
 
               // ao clicar no botão da tela de login e validar, fecha a jDialog e executa o codigo abaixo (que libera o jFrame principal...)

                  new LeilaoGUI().setVisible(true);
        
            }
        });
Só que a linha onde eu coloquei jDialogLogin.setVisible(true) da um erro dizendo que uma variavel não estática não pode ser referenciada num contexto estático... se fosse uma variável eu declararia como static e resolveria eu acho, porém com o jDialog não sei o que fazer...

Onde estou 'bocaberteando' :)

Obrigado.

Y

Não sei se é uma boa ideia iniciar as janelas no método run(). Todas as vezes que eu faço isso é pelo construtor da classe.

Eu faria da seguinte forma:

No Construtor da LeilaoGUI:

public LeilaoGUI() {
        initComponents();
        JDialog login = new JDialogLogin(this,true); //Considerando que o construtor do JDialog pede a classe pai e o boolean do modal.
        login.show();
    }

Na main da LeilaoGUI:

public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormPrin(); // Só retirei o .setVisible(true); } }); }

No construtor do JDialogLogin:

Frame frame; //Variavel global encarregada de receer o Frame pai
    public JDialogLogin(Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        frame = parent; //Aqui a variavel recebe
    }

E finalmente quando o cliente acertar o login ele executa este código:

this.dispose();
        frame.setVisible(true);

Espero que isso dê pra resolver seu problema, testei em um projeto aqui e deu certo.

PS: Ou você pode iniciar sua aplicação primeiro, deixá-la visível e iniciar o JDialog com modal ativado na frente, com DefaultCloseOperation em DO_NOTHING e no botão de cancelar ele fecha o programa, só uma sugestão :wink:

J

Muito obrigado Yago,

Consegui resolver o problema.

[]'s,
Jeferson

Criado 14 de novembro de 2012
Ultima resposta 15 de nov. de 2012
Respostas 4
Participantes 2