Problema com evento ActionListener

2 respostas
GuiiBarbosaa

Olá galera é minha primeira vez que to postando no fórum, procurei em vários lugares informações pra sanar minha duvida mais não obtive exito. Espero que me ajudem:

Seguinte: Eu criei um Frame para um login, se TRUE ele exibe o resto do sistema, FALSE Mensagem de erro. O Problema é que não to conseguindo retornar os respectivos valores true ou false que estão dentro do método actionPerformed do construtor da minha GUI de login para dentro do meu Main para fazer a logica de chamar o Frame do sistema ou de mensagem de Erro.

aguardo ajudas !!!

2 Respostas

M

Uma forma de você fazer isso é instanciar a tela que inicia o sistema dentro da tela de login, exatamente no método actionPerformed o ActionListener. Algo assim:

new Sistema().setVisible(true);
Login.this.dispose();

Isso vai funcionar, o problema é que você vai deixar o seu código de login acoplado ao sua tela de sistema e você vai precisar alterar o código se um dia quiser usar essa tela de login em outro lugar. Se você não quiser que a tela de Login conheça a tela de sistema, você pode implementar um listener que avisa que ocorreu o login. Para isso você precisa:

- Criar uma interface que representa o seu listener (LoginListener, por exemplo)
- Criar uma classe responsável por chamar o Login e chamar o sistema quando o login for efetuado corretamente
- Adicionar o listener de login na classe acima
- Notificar os ouvintes que estiverem registrados quando ocorrer um login correto
- Através da classe que gerencia o login e o sistema(a classe do passo 2, que é um LoginListener), matar a tela de login e criar a tela do Sistema.

Segue um exemplo abaixo, que faz exatamente essa troca. Perceba que ele não faz validações de login, sempre considera que ao clicar no botão deve ser efetuada a troca entre a tela de login e a tela do sistema:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Login extends JFrame {
	
	private Set<LoginListener> loginListeners;
	private JButton button;
	
	public Login() {
		loginListeners = new HashSet<LoginListener>();
		button = new JButton("Login");
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Login.this.notifyListeners();
			}
		});
		setSize(200,200);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		add(button, BorderLayout.CENTER);
	}
	
	public void addLoginListener(LoginListener loginListener) {
		loginListeners.add(loginListener);
	}
	
	private void notifyListeners() {
		for(LoginListener loginListener : loginListeners) {
			loginListener.usuarioLogado();
		}
	}

}
public interface LoginListener {
	
	void usuarioLogado();

}
public class Main implements LoginListener {
	
	public Main() {
		login = new Login();
		login.addLoginListener(this);
		login.setVisible(true);
	}

	@Override
	public void usuarioLogado() {
		login.dispose();
		new Sistema().setVisible(true);
	}
	
	private Login login;
	
	public static void main(String[] args) {
		new Main();
	}

}[code]
import javax.swing.JFrame;



public class Sistema extends JFrame {
	
	public Sistema() {
		setSize(400,400);
		setTitle("Meu sistema");
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

}
GuiiBarbosaa

Obrigado marcio_gs, consegui resolver o meu problema criei um listener para fazer a mudança e levantar a classe do sistema ja autenticado como dito.

Criado 20 de outubro de 2012
Ultima resposta 21 de out. de 2012
Respostas 2
Participantes 2