Com extends JDialog não aparece JFrame

Preciso fazer um aplicativo que leia um usuario, uma senha, guarde em um arquivo .txt e faça o login, utilizando o JDialog também.

A minha idéia foi aparecer um menu perguntando o que o usuário deseja fazer, criar usuario ou logar, e então abrir um JDialog solicitando o usuario e senha.

Criar e Logar funcionam, porém não em conjunto com o menuzinho, aparece apenas um JFrame vazio… :s

As Classes são:

[color=red]CLASSE OPCAO[/color]

[code]import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Opcao extends JFrame implements ActionListener {

JPanel painel;
JPanel painel2;
JLabel rotulo;
JButton criar;
JButton logar;
JMenuBar barra;
JMenu aplicativo;
JMenuItem sair;

public Opcao() {
	setTitle("Opções");
	this.setSize(300, 110);
	this.setVisible(true);
	this.setLayout(new FlowLayout());
	this.setLocationRelativeTo(null);

	painel = new JPanel();
	painel.setLayout(new BorderLayout());

	rotulo = new JLabel("O que deseja fazer ?");
	rotulo.setFont(new Font("Arial", Font.PLAIN, 20));
	painel.add(rotulo, BorderLayout.CENTER);

	painel2 = new JPanel();
	painel2.setLayout(new GridLayout(1, 2, 20, 20));

	criar = new JButton("Criar Usuário");
	criar.addActionListener(this);
	painel2.add(criar);

	logar = new JButton("Efetuar Login");
	logar.addActionListener(this);
	painel2.add(logar);

	this.add(painel, BorderLayout.NORTH);
	this.add(painel2, BorderLayout.SOUTH);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent e) {
	// Verifica se o evento pertence ao botão
	if (e.getSource() == criar) {
		CriaLogin criaLogin = new CriaLogin(this);
		JOptionPane.showMessageDialog(null, "Usuário cadastrado com Sucesso:\n\nLogin: " + criaLogin.getUsuario() + "\nSenha: " + criaLogin.getSenha());
	}
}

}
[/code]

[color=red]CLASSE CRIALOGIN[/color]

[code]import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JFrame;

public class CriaLogin extends JDialog implements ActionListener{

JPanel painel;
JLabel rotulo1;
JTextField campo1;
JLabel rotulo2;
JTextField campo2;
JButton botao;
String usuario;
String senha;

public CriaLogin(JFrame frame){
	super(frame, true);
	this.setSize(290, 125);
	this.setVisible(true);
	this.setLayout(new BorderLayout());
	this.setLocationRelativeTo(null);
	this.setTitle("Criar Login");
	//this.setResizable(false);
	
	painel = new JPanel();
	
	rotulo1 = new JLabel("Login:");
	painel.add(rotulo1);
	
	campo1 = new JTextField(20);
	painel.add(campo1);
	
	rotulo2 = new JLabel("Senha:");
	painel.add(rotulo2);
	
	campo2 = new JTextField(20);
	painel.add(campo2);
	
	botao = new JButton("Criar Login");
	botao.addActionListener(this);
	painel.add(botao);
	
	this.add(painel);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//Fim do Construtor

public void actionPerformed(ActionEvent e) {
	// Verifica se o evento pertence ao botão
	if (e.getSource() == botao) {
		usuario = campo1.getText();
		senha = campo2.getText();
		new GeradorLogin(campo1.getText(), campo2.getText());
		dispose();
	}
}

public String getUsuario(){
	return usuario;
}

public String getSenha(){
	return senha;
}

} //Fim da Classe CriaLogin[/code]

[color=red]CLASSE GERADORLOGIN[/color]

[code]import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;

public class GeradorLogin {

File arquivo;
FileWriter arquivoEscrever;
PrintWriter escrever;

public GeradorLogin(String usuario, String senha) {
	try {
		arquivo = new File("login.txt");

		arquivo.createNewFile();
		
		arquivoEscrever = new FileWriter("login.txt", false);
		
		escrever = new PrintWriter(arquivoEscrever);

		escrever.printf("%s%s", usuario, senha);
		
		escrever.close();

	} catch (IOException e) {
		
		System.out.println(e.getMessage());
	}
} // Fim do Construtor

} // Fim da Classe GeradorLogin[/code]

[color=red]CLASSE TESTAOPCAO[/color]

[code]public class TestaOpcao {
public static void main(String[] args) {

	Opcao op = new Opcao();
}

}[/code]

Quem puder ajudar, brigadão… :wink:

É porque você tem que chamar o método setVisible(true); de seus JFrames ao final do método construtor ou chamá-los no Main (é uma boa prática).

:thumbup:

[quote=InicianteJavaHenrique]É porque você tem que chamar o método setVisible(true); de seus JFrames ao final do método construtor ou chamá-los no Main (é uma boa prática).

:thumbup: [/quote]

Não fez diferença. Aliás, desse jeito nem o JFrame vazio abriu… :?

Arrumei a classe GeradorLogin:

[code]import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;

public class GeradorLogin {

File arquivo; // Pra que serve esse File?
FileWriter arquivoEscrever;  
PrintWriter escrever;  

public GeradorLogin(String usuario, String senha) {  
    try {  
        arquivo = new File("login.txt");  // Desnecessario....

        if (!arquivo.exists()) arquivo.createNewFile(); // Se o arquivo não existe, cria-o
          
        arquivoEscrever = new FileWriter("login.txt"); // Não precisa colocar false, false já é o padrão
          
        escrever = new PrintWriter(arquivoEscrever);  

        escrever.printf("%s%s", usuario, senha);  
          
        escrever.close();  

    } catch (IOException e) {  
        e.printStackTrace(); // Adicionei um printStackTrace()
        System.out.println(e.getMessage());  
    }  
} // Fim do Construtor  

} // Fim da Classe GeradorLogin [/code]
:thumbup:

[quote=mcirqueira]Arrumei a classe GeradorLogin:

[code]import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;

public class GeradorLogin {

File arquivo; // Pra que serve esse File?
FileWriter arquivoEscrever;  
PrintWriter escrever;  

public GeradorLogin(String usuario, String senha) {  
    try {  
        arquivo = new File("login.txt");  // Desnecessario....

        if (!arquivo.exists()) arquivo.createNewFile(); // Se o arquivo não existe, cria-o
          
        arquivoEscrever = new FileWriter("login.txt"); // Não precisa colocar false, false já é o padrão
          
        escrever = new PrintWriter(arquivoEscrever);  

        escrever.printf("%s%s", usuario, senha);  
          
        escrever.close();  

    } catch (IOException e) {  
        e.printStackTrace(); // Adicionei um printStackTrace()
        System.out.println(e.getMessage());  
    }  
} // Fim do Construtor  

} // Fim da Classe GeradorLogin [/code]
:thumbup: [/quote]

Obrigado pelas correções, tô meio confuso ainda com a parte de interface e arquivos… :lol:

[quote=wesleyosilva][quote=mcirqueira]Arrumei a classe GeradorLogin:

[code]import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;

public class GeradorLogin {

File arquivo; // Pra que serve esse File?
FileWriter arquivoEscrever;  
PrintWriter escrever;  

public GeradorLogin(String usuario, String senha) {  
    try {  
        arquivo = new File("login.txt");  // Desnecessario....

        if (!arquivo.exists()) arquivo.createNewFile(); // Se o arquivo não existe, cria-o
          
        arquivoEscrever = new FileWriter("login.txt"); // Não precisa colocar false, false já é o padrão
          
        escrever = new PrintWriter(arquivoEscrever);  

        escrever.printf("%s%s", usuario, senha);  
          
        escrever.close();  

    } catch (IOException e) {  
        e.printStackTrace(); // Adicionei um printStackTrace()
        System.out.println(e.getMessage());  
    }  
} // Fim do Construtor  

} // Fim da Classe GeradorLogin [/code]
:thumbup: [/quote]

Obrigado pelas correções, tô meio confuso ainda com a parte de interface e arquivos… :lol: [/quote]
Ah tá!
O File está aí para criar o arquivo… :wink: