Manipulação de JFrame

6 respostas
gqferreira

Olá pessoal!
Sou eu de novo...Acho que vocês já estão até enjoads de mim né?! rssss....
Fazê o que?! Tenho dúvidas...

Ao problema...

Tenho uma tela de login, depois que o usuário se loga, deve-se arir o programa (lógico :roll: ),mas como fechar a tela de login sem fechar o programa inteiro?? Vou postar os códigos... Essa é a tela de login...
package login;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import abertura.Abertura;

public class FrameLogin extends JFrame
{
	static JLabel lbLogin,lbSenha,lbFundo;
	static JComboBox cbUsuario;
	static JPasswordField pfSenha;
	static JButton btOk,btCancelar;
	javax.swing.ImageIcon icon;


	public static void main(String args[])
	{
		JFrame janela = new FrameLogin();
		//janela.setUndecorated(true);
		//janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
		//janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		janela.setVisible(true);
		janela.setResizable(false);
	}

	public FrameLogin()
	{
		setTitle("Login");
		setSize(250,230);
		//125
		setLocationRelativeTo(null);
		getContentPane().setLayout(null);
		//*******************************************

		java.net.URL fundoUrl = getClass().getResource("imagens/login.png");
		icon = new javax.swing.ImageIcon( fundoUrl );
		Font fonte = new Font("Serif", Font.BOLD, 25);
		//String usuario[]={"Escolha","Administrador"};

		//Instanciando os objetos
		lbLogin = new JLabel("Login");
		cbUsuario = new JComboBox(Login.caregaUsuarios());
		lbSenha = new JLabel("Senha");
		pfSenha = new JPasswordField();
		btOk = new JButton("OK");
		btCancelar = new JButton("Cancelar");
		lbFundo = new JLabel(icon);
		//tamanho e localização dos componentes
		lbLogin.setBounds(93,10,65,30);
		cbUsuario.setBounds(50,45,150,25);
		lbSenha.setBounds(93,85,65,25);
		pfSenha.setBounds(50,115,150,25);
		btOk.setBounds(18,150,100,25);
		btCancelar.setBounds(125,150,100,25);
		lbFundo.setBounds(0,0,250,200);
		//Aterando fontes
		lbLogin.setFont(fonte);
		lbSenha.setFont(fonte);
		//Adicionando os componentes
		getContentPane().add(lbLogin);
		getContentPane().add(lbSenha);
		getContentPane().add(cbUsuario);
		getContentPane().add(pfSenha);
		getContentPane().add(btCancelar);
		getContentPane().add(btOk);
		getContentPane().add(lbFundo);
		getContentPane().setBackground(Color.white);
		
		btOk.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				String usuario,senha;
				usuario = cbUsuario.getSelectedItem().toString(); 
				senha = pfSenha.getText();
				if (Login.login(usuario, senha))
				{
					
					JFrame janela = new Abertura();
					janela.setVisible(true);
					fecha();//Tentativa de fechar que não funciona
					System.out.println("Tentou fechar");
					
				}
				else
					JOptionPane.showMessageDialog(null,"Usuário e/ou senha inválidos", "", JOptionPane.WARNING_MESSAGE);

			}	
		});
		btCancelar.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}	
		});


	}
	public static void fecha()
	{
		FrameLogin fl = new FrameLogin();
		fl.dispose();
	}


}
Quando abrir esta a FrameLogin deve ser fechada...
package abertura;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import login.FrameLogin;

public class Abertura extends JFrame
{

	/*public static void main(String args[])
	{
		JFrame janela = new Abertura();
		//janela.setUndecorated(true);
		//janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		janela.setVisible(true);
	}*/

	public Abertura()
	{
		setTitle("Base");
		setSize(1024,768);
		setLocationRelativeTo(null);
		getContentPane().setLayout(null);
	
		
	}


}
Mas tem como fechar ela e limpar da memória ou ela continuará rodando em background?

Valeu gente e obrigado pela paciência! :thumbup: :thumbup: :thumbup:
Ha...já tinha lido diversos tópicos aqui no guj e não consegui resolver o meu problema...

6 Respostas

Reilander

Substitua o conteúdo do método “fecha()” por:

setVisible(false);
dispose();
edipokbelo

aee dá uma olhada nesse tópico

http://www.guj.com.br/posts/list/15/114782.java

[]'s

gqferreira

Não deu certo colocar o setVisible no lugar fo Fecha() porque não se dá para colocar essa instrução dentro de um listener, então coloqueio o que vc precomendou dentro do método Fecha() mas criando o objeto da classe senão não dava. Só que não funcionou…

gqferreira

edipokbelo, até que entendi a sua explicação, mas o problema é que o fechamento da janela deve ocorrer de acordo com o listener de um botão, e dá erro tentar botar o this.dispose() e o setVisible(false) não dá erro mas também não funciona.

Reilander

Retire “static” do seu método “fecha()” que você poderá executar as instruções que lhe falei.

gqferreira

Valeu Reilander!!! O problema era o “static”…

:thumbup: :thumbup: :thumbup: :thumbup:

Criado 17 de janeiro de 2009
Ultima resposta 18 de jan. de 2009
Respostas 6
Participantes 3