Boa noite galera, como eu faço para que, após o usuário logar no sistema, aparecer o nome dele no canto da tela???
Tipo assim.: ( Bem vindo Anderson )…
Aparecer o nome do Usuário ta tela após logar!
20 Respostas
Boa noite galera, como eu faço para que, após o usuário logar no sistema, aparecer o nome dele no canto da tela???
Tipo assim.: ( Bem vindo Anderson )…
pega o nome e passa por parametro =D
Não entendi o que vc quis dizer… eu tava pensando em fazer assim, quando o usuário logar, o nome dele aparecer no canto da tela, tipo em uma JLabel…
Vc provavelmente deve ter instanciado a classe do login pra fazer a validação, como provavelmente vc deve ter criado os setters e getters, pelo getter vc pega o nome da pessoa que fez o login.
Boa noite Anderson.
Tudo depende de que tela voce quer que o nome apareça, isto pois, voce dever ter criado um formulário de Login, então voce deve passar o nome do mesmo para o Frame Principal, isto é, presumindo que voce deve ter feito a sua aplicação desta forma.
Antes de mais nada, crie dois métodos estáticos, um para atribuir (set) e outro para recuperar (get), isto no Frame Principal, e lógico voce dever criar uma variável estática também no Frame Principal, é tudo mais ou menos assim:
public class FramePrincipal extends JFrame {
private static String user_log;
.....
public static String getUser_log() {
return user_log;
}
public static void setUser_log(String user_log) {
FramePrincipal.user_log = user_log;
}
....
}
No meu Frame de login, eu logo o usuário com o método booleano logon, assim:
private Boolean logon(){
UsuarioBean bean = new UsuarioBean();
bean.setLogin_usu(txtlogin.getText());
bean.setSenha_usu(Formatter.getMD5(txtpassword.getText()));
UsuarioDao dao = new UsuarioDao();
try {
dao.selectLogin(bean);
if ("".equals(bean.getNome_usu())){
verifyChances();
return false;
} else {
FramePrincipal.setUser_log(bean.getLogin_usu());
return true;
}
} catch (Exception ex) {
ContentLayout.mensagemErro("recuperados", ex.getMessage());
accessdenied = -1;
return false;
}
}
Voce não precisa criar o método exatamente igual ao meu, apenas coloquei assim para que voce tenha uma idéia de como fazer.
Depois de logado, crie um JPanel onde voce posso colocar não só o usuário logado, mais também a data e a hora do sistema, assim:
SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
lbldata = new JLabel("Data: "+data.format(new Date()));
lbldata.setHorizontalAlignment(JLabel.LEFT);
data = new SimpleDateFormat("HH:mm");
lblhora = new JLabel("Hora: "+data.format(new Date()));
lblhora.setHorizontalAlignment(JLabel.CENTER);
lbluser = new JLabel("Operador: "+FramePrincipal.getUser_log());
lbluser.setHorizontalAlignment(JLabel.RIGHT);
header = new JPanel(new GridLayout(1,3));
header.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
header.add(lbldata);
header.add(lblhora);
header.add(lbluser);
add(header);
...
Agora depende de voce, se voce quer esta informção no cabeçalho ou no rodapé do Frame Principal
[quote=discorpio]Boa noite Anderson.
Tudo depende de que tela voce quer que o nome apareça, isto pois, voce dever ter criado um formulário de Login, então voce deve passar o nome do mesmo para o Frame Principal, isto é, presumindo que voce deve ter feito a sua aplicação desta forma.
Antes de mais nada, crie dois métodos estáticos, um para atribuir (set) e outro para recuperar (get), isto no Frame Principal, e lógico voce dever criar uma variável estática também no Frame Principal, é tudo mais ou menos assim:
public class FramePrincipal extends JFrame {
private static String user_log;
.....
public static String getUser_log() {
return user_log;
}
public static void setUser_log(String user_log) {
FramePrincipal.user_log = user_log;
}
....
}
No meu Frame de login, eu logo o usuário com o método booleano logon, assim:
private Boolean logon(){
UsuarioBean bean = new UsuarioBean();
bean.setLogin_usu(txtlogin.getText());
bean.setSenha_usu(Formatter.getMD5(txtpassword.getText()));
UsuarioDao dao = new UsuarioDao();
try {
dao.selectLogin(bean);
if ("".equals(bean.getNome_usu())){
verifyChances();
return false;
} else {
FramePrincipal.setUser_log(bean.getLogin_usu());
return true;
}
} catch (Exception ex) {
ContentLayout.mensagemErro("recuperados", ex.getMessage());
accessdenied = -1;
return false;
}
}
Voce não precisa criar o método exatamente igual ao meu, apenas coloquei assim para que voce tenha uma idéia de como fazer.
Depois de logado, crie um JPanel onde voce posso colocar não só o usuário logado, mais também a data e a hora do sistema, assim:
SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
lbldata = new JLabel("Data: "+data.format(new Date()));
lbldata.setHorizontalAlignment(JLabel.LEFT);
data = new SimpleDateFormat("HH:mm");
lblhora = new JLabel("Hora: "+data.format(new Date()));
lblhora.setHorizontalAlignment(JLabel.CENTER);
lbluser = new JLabel("Operador: "+FramePrincipal.getUser_log());
lbluser.setHorizontalAlignment(JLabel.RIGHT);
header = new JPanel(new GridLayout(1,3));
header.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
header.add(lbldata);
header.add(lblhora);
header.add(lbluser);
add(header);
...
Fiz um parada aqui que aparentemente deu certo!, vou fazer mais testee qualquer coisa eu aviso!!
Vlw discorpio , deu certo aqui, não fiz igual o seu, mas entendi como faz...
Mas to com um outro problema aqui, no botao logar.... ele verifica se os usuarios são válidos, caso sim abre a Frame Principal, caso não, era pra lançar uma execção...Mas ta acontecendo o seguinte, caso o usuário não seja válido ele não lança a execção, será o por que desse erro??????? Vo postar o método do botão Logar..
private void bt_logarActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource() == bt_logar){
LoginNegocio log = new LoginNegocio();
try {
List<Login> lista = log.buscarLogins(tf_usuario.getText() , tf_senha.getText() );
for(Login login : lista){
String usuario = login.getUsuario();
String senha = login.getSenha();
if((tf_usuario.getText().equals(usuario)) && (tf_senha.getText().equals(senha))){
ContatoFrame frame = new ContatoFrame();
frame.addLogin(usuario);
frame.setVisible(true);
}else{
JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos"); // ESSA É A ESXCEÇÃO TERÍA QUETER SIDO LANÇADA
}
}
} catch (SQLException ex) {
Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Bom dia Anderson.
Já que voce está usando essa lógica, então o correto seria assim:
private void bt_logarActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource() == bt_logar){
LoginNegocio log = new LoginNegocio();
try {
List<Login> lista = log.buscarLogins(tf_usuario.getText() , tf_senha.getText() );
ContatoFrame frame = new ContatoFrame(); // O frame de contato tem que estar fora do loop
for(Login login : lista){
String usuario = login.getUsuario();
String senha = login.getSenha();
if((tf_usuario.getText().equals(usuario)) && (tf_senha.getText().equals(senha))){
frame.addLogin(usuario);
frame.setVisible(true);
break; // Tão logo o usuário foi encontrado, não é necessário procurar o resto da lista, é ?
} else {
frame.addLogin("");
}
}
if ("".equals(frame.getLogin()){
JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos");
}
} catch (SQLException ex) {
Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Repare que voce estava pecando em tres aspectos:
1º) O Frame contato tem que ficar fora do loop, porque se ficar dentro, voce vai criar várias instâncias do frame, tantas quanto for o tamanho do laço do loop.
2º) Tão logo o usuário seja logado, a procura da lista tem que parar, porque se continuar, o próximo usuário que não é logado vai passar pelo teste do IF novamente é o resultado será false, e quando o último usuário da lista passar, o resultado será o usuário que não deverá estar logado.
3º) Na verdade, o aviso de usuário não logado era para ser disparado a cada linha percorrida da lista, entretanto como o Frame contato estava sendo instanciado novamente a cada percurso do loop, talvez seja essa o porque não ter disparado. Repare que eu coloquei a mensagem fora do loop, verficando se o login do frame está nulo.
A meu ver, esta lógica de autenticação do usuário não é a correta, ou seja, voce está varrendo sequencialmente toda uma lista de usuários. A lógica de varredura sequencial há muito tempo foi abolida, visto que ela sobrecarrega em muito o processamento de sua aplicação, comprometendo a performance da mesma. Imagine se voce fosse sócio do Bill Gates ou do Steve Jobs e Steve Wozniek (donos da Apple), cujos funcionários tem pra lá de 1000 (mil) e todos eles precisem se conectar ao sistema :!: :!: :!:
O correto seria voce criar uma classe DAO que executasse todas as linhas de comando SQL e dentro desse DAO, escrevesse uma linha de comando SQL que retornasse apenas o usuário autenticado, em caso do ResultSet retornar uma linha de registro, então o usuário está logado, em caso negativo não.
Veja no meu método booleano logon(), eu uso o DAO passando para o mesmo um bean populado com os usuarios que eu quero verificar, ele é verificado na próxima linha se estar nulo ou não.
Espero ter ajudado
Não deu certo, a execção não foi lançada!! 
Boa tarde Anderson.
Não deu certo talvez por causo disto aqui:
if ("".equals(frame.getLogin()){
JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos");
}
Voce, ao menos, criou um método getLogin, que retorna o usuário logado :?: :?: :?:
Outra coisa, faltou a mensagem de usuário logado, se ele não está mostrando a mensagem, é porque está encontrando o registro, então coloque uma mensagem de registro encontrado, assim:
try {
List<Login> lista = log.buscarLogins(tf_usuario.getText() , tf_senha.getText() );
ContatoFrame frame = new ContatoFrame(); // O frame de contato tem que estar fora do loop
for(Login login : lista){
String usuario = login.getUsuario();
String senha = login.getSenha();
if((tf_usuario.getText().equals(usuario)) && (tf_senha.getText().equals(senha))){
frame.addLogin(usuario);
frame.setVisible(true);
JOptionPane.showMessageDialog(null,"Usuário encontrado");
break;
} else {
frame.addLogin("");
}
}
if ("".equals(frame.getLogin()){
JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos");
}
} catch (SQLException ex) {
Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex);
}
Boa tarde Anderson.Não deu certo, a execção não foi lançada!! :(Não deu certo talvez por causo disto aqui:
if ("".equals(frame.getLogin()){ JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos"); }Voce, ao menos, criou um método getLogin, que retorna o usuário logado :?: :?: :?:
Outra coisa, faltou a mensagem de usuário logado, se ele não está mostrando a mensagem, é porque está encontrando o registro, então coloque uma mensagem de registro encontrado, assim:
try { List<Login> lista = log.buscarLogins(tf_usuario.getText() , tf_senha.getText() ); ContatoFrame frame = new ContatoFrame(); // O frame de contato tem que estar fora do loop for(Login login : lista){ String usuario = login.getUsuario(); String senha = login.getSenha(); if((tf_usuario.getText().equals(usuario)) && (tf_senha.getText().equals(senha))){ frame.addLogin(usuario); frame.setVisible(true); JOptionPane.showMessageDialog(null,"Usuário encontrado"); break; } else { frame.addLogin(""); } } if ("".equals(frame.getLogin()){ JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos"); } } catch (SQLException ex) { Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex); }
Pois é, eu criei o getLogin(), senão tinha acusado que o método não existe, e essa mensagem de usuário logado não prscisa aparecer, basta apenas direcionar para a Frame principal,.. continua não lançando a excção!
Olá Anderson.
Me responda uma coisa.
Como essa lista abaixo está sendo populada.
List<Login> lista = log.buscarLogins(tf_usuario.getText() , tf_senha.getText() );
Pelo que me consta, voce já passa como parâmetro, o que voce digitou dentro dos JTextFields, o que não entendi então o porque do loop de varredura da lista :?: :?: :?:
public List<Login> buscarLogin(String usuario , String senha) throws SQLException{
Connection conn = Conexao.getConexao();
String sql = "select * from login where usuario = ? and senha = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,usuario);
stmt.setString(2,senha);
ResultSet rs = stmt.executeQuery();
List<Login> lista = new ArrayList<Login>();
while(rs.next()){
Login log = new Login(rs.getString("usuario"),rs.getString("senha"));
lista.add(log);
}
rs.close();
stmt.close();
return lista;
}
}
Ai discorpio, esse é meu método…
Bom dia Anderson.
Se voce é pai, então meus parabéns pelo dia de hoje.
Hoje eu dei meus parabéns ao meu pai, o único que sobrou na face da Terra e também dos céus e todo o universo, DEUS.
Voltando ao assunto do seu método, acho que voce está cometendo redundância de métodos, ou seja, o método “buscarLogins” faz exatamente a mesma coisa que o método que dispara o evento do botão, enquanto o método “buscarLogins” autentica o usuário existente no banco e armazena numa lista, o outro método percorre toda a lista para encontrar o usuário que foi encontrado anteriormente. Voce não acha isto disperdício de recursos :?: Isto é o que chamamos aqui onde trabalho de congestionamento de lógica. Outra questão que voce não considerou é que e se o usuário não existir no banco de dados, então logo no método “buscarLogins” terá opção negativa, e a lista não será preenchida, assim sendo, a varredura da lista no segundo método torna-se ineficaz.
Eu acho que entendi o que voce pretende fazer, ou seja, voce criou esta lista porque quer fazer um controle dos usuários que estão logados, não é isto mesmo :?: Nada impede de voce fazer isto, porém vamos fazê-lo de maneira correta.
Em primeiro lugar, voce deverá tornar público o acesso a sua lista de usuários, veja bem, eu disse o acesso a lista que deverá ser público e não a lista propriamente dita. O que eu quero dizer é que vamos encapsular esta lista no Frame Princiapal, ah, esta lista também tem que ser estática juntamente com os seus métodos, assim:
.....
private static List<Login> lista;
....
....
public static List<Login> getLista(){
if (lista == null) lista = new ArrayList<Login>();
return lista;
}
public static void setLista(List<Login> lista){
this.lista = lista;
}
....
....
Vamos tornar o método “buscarLogins” com retôrno booleano, fazendo com que se o usuário for encontrado, retorne true, caso contrário, retorne false, assim:
public Boolean buscarLogin(String usuario , String senha) throws SQLException{
Boolean ret = false;
Connection conn = Conexao.getConexao();
String sql = "select * from login where usuario = ? and senha = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,usuario);
stmt.setString(2,senha);
ResultSet rs = stmt.executeQuery();
/* Se o ResultSet retornar com tamanho igual a zero,
significa que o usuário não foi encontrado */
if (rs.size() = 0){
JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos");
} else {
while(rs.next()){
Login log = new Login(rs.getString("usuario"),rs.getString("senha"));
FramePrincipal.getLista().add(log);
}
ret = true;
}
rs.close();
stmt.close();
return ret;
}
}
Agora vamos ao evento de disparo do botão
private void bt_logarActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource() == bt_logar){
LoginNegocio log = new LoginNegocio();
if (log.buscarLogins(tf_usuario.getText() , tf_senha.getText()){
// Dar acesso ao usuário.
} else {
// Negar acesso ao usuário
}
...
}
}
Repare como ficou bem dinamizado o seu método “buscarLogins”, onde o que voce chama de disparar exceção que na verdade é disparar apenas uma mensagem de alerta ao usuário, e feita dentro do método “buscarLogins”, onde, no primeiro momento é realizada a autenticação do usuário, tendo ao mesmo tempo o preenchimento da lista única que está encapsulada.
O que voce estava fazendo era o mesmo erro anterior, ou seja, a cada chamada do método “buscarLogins” estava criando uma lista nova com apenas um único elemento.
Espero ter te ajudado
Bom dia discorpion, feliz dia dos pais pra você mas eu não sou pai… :XD:
É o seguinte, esse método que vc criou ai pra atenticar o login, ta quebrando toda minha regra, na minha aplicação eu tenho 2 pacotes, o das telas e o pacote Banco, que contem as Classes DAO… nesse seu método vc ta chamando a frame principál dentro do método buscarLogins que esta dentro da classe DAO , acho que isso não é viável para o meu padrão de desenvolvimento!! 
…
Olá anderson,
Esta questão é muito simples de resolver. Encapsule a lista dentro do sua classe DAO, assim voce não precisa chamá-la do FramePrincipal, eu citei o FramePrincipal, porque não conheço toda as regras de sua aplicação e nada impede da lista ser encapsulada no DAO.
O que não pode ocorrer, e voce ficar instanciando uma nova lista a cada percurso da chamada do método buscar Logins, porque senão, voce vai ter varias listas instânciadas com um único ou sem nenhum elemento e isso é que vai quebrar a lógica de desenvolvimento da sua aplicação.
public boolean buscarLogin(String usuario , String senha) throws SQLException{
boolean ret = false;
Connection conn = Conexao.getConexao();
String sql = "select * from login where usuario = ? and senha = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1,usuario);
stmt.setString(2,senha);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Login log = new Login(rs.getString("usuario"),rs.getString("senha"));
ret = true;
}
rs.close();
stmt.close();
return ret;
}
private void bt_logarActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource() == bt_logar){
loginDAO dao = new loginDAO();
ContatoFrame frame = null;
try {
frame = new ContatoFrame();
} catch (SQLException ex) {
Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex);
}
String usuario = tf_usuario.getText();
String senha = tf_senha.getText();
try {
if (dao.buscarLogin(usuario,senha)) {
frame.addLogin(usuario);
frame.setVisible(true);
}else{
JOptionPane.showMessageDialog(null,"Usuário ou Senha inválidos");
}
} catch (SQLException ex) {
Logger.getLogger(TelaLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Olá Anderson.
Agora sim, voce simplificou a lógica.
Se a função principal da lista era outra, que não seja a de armazenar usuários logados e manter controles dos mesmos, então esta foi sabiamente eliminada.
Fico feliz de ter te ajudado.