Mostra usuario logado[RESOLVIDO]

Galera como faço para mostrar em um nova tela o Usuário que fez o login?

[code]private void btAcessarActionPerformed(java.awt.event.ActionEvent evt) {

Login autentica = new Login();  
  
telaInicial principal = new telaInicial();  
  
autentica.setUsuario(txtUsuario.getText());  
autentica.setSenha(txtSenha.getText());    

if(autentica.autentica() == false){  
 JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos !","ATENÇÃO",JOptionPane.WARNING_MESSAGE);  
}else{  
      
    this.dispose();  
    principal.show();  
}           

} [/code]

Esta é minha validação de usuario e senha. aguardo respostas

Chama a função pegar da sua variavel o GETTER;

[code]Login objUsuario = new Login(); //declaração general antes do método construtor;

jTextField.setText(objUsuario.getUsuario); //jtext do novo formulario;
[/code]

O que vc pode fazer neste caso também é trabalhar com uma variável ou classe estática, sendo que
mesmo se um outro formulário for acessado vc ainda poderá recuperar os valores de tal usuário.

Ex:


static String usuario = objUsuario.getUsuario();

Após o login ser feito vc poderá acessar está variável pois a mesma é do tipo static
Mas é claro que existem N maneiras mais sofisticadas de efetuar este controle como por exemplo
o uso de Sessões e Cookies porém sou especializado em desenvolvimento para web não tenho
certeza se estes recursos estão disponíveis para programação de aplicações desktop java.

Qualquer dúvida chama Ae!!!

Olá charleston10

Comigo aqui não deu certo sua dica aparece null no lugar do nome do usuário. O que poderia ser isso ou você tem alguma outra ideia?

E diego_ms136, desculpa a ignorância mas eu não entendi onde deveria colocar essa dica que você me deu se puder mostrar onde posso colocar isso agradeceria.

Gbios, uma pergunta:

// seta
System.setProperty("login", "usuario");
System.setProperty("password", "senha");

// recupera		
System.getProperty("login", "");
System.getProperty("password", "");

Isso não resolveria ? O método getProperty(), eu coloquei o “” ao fim para indicar que caso ele não encontre a propriedade fornecida (login, por exemplo) ele retorne uma String vazia.

[quote=Gbios]Olá charleston10

Comigo aqui não deu certo sua dica aparece null no lugar do nome do usuário. O que poderia ser isso ou você tem alguma outra ideia?

E diego_ms136, desculpa a ignorância mas eu não entendi onde deveria colocar essa dica que você me deu se puder mostrar onde posso colocar isso agradeceria.[/quote]

Aparece null talvez pelo motivo da declaração da variavel da sua classe

pode ser q esteja assim
private String usuario;

tente isso
static private String usuario;
/*
*Deixa estatico a variavel para nao haver mudança no valor dela, caso precisar usar o mesmo valor em outra classe
*/

[quote=charleston10][quote=Gbios]Olá charleston10

Comigo aqui não deu certo sua dica aparece null no lugar do nome do usuário. O que poderia ser isso ou você tem alguma outra ideia?

E diego_ms136, desculpa a ignorância mas eu não entendi onde deveria colocar essa dica que você me deu se puder mostrar onde posso colocar isso agradeceria.[/quote]

Aparece null talvez pelo motivo da declaração da variavel da sua classe

pode ser q esteja assim
private String usuario;

tente isso
static private String usuario;
/*
*Deixa estatico a variavel para nao haver mudança no valor dela, caso precisar usar o mesmo valor em outra classe
*/
[/quote]

O que o modificador estático (static) tem relação com “não alterar o valor da variavél” ? O modificar static simplesmente indica que aquele atributo (método, variavél…) passa a ser da classe e não mais da instância, simples assim . Fazer junção de um static private para esse caso, não faz o menor sentido.

saquei, corrigindo;

entao coloque

final private String usuario;

;]

[quote=charleston10]saquei, corrigindo;

entao coloque

final private String usuario;

;][/quote]

Piorou :slight_smile:
O modificador final vai exigir que tu atribua um valor a variável usuário, feito isso, não se pode mais modificador esse valor.
Ele só poderá usar dessa forma se no momento em que ele declarar essa variável ele já atribua um valor a ela, ai ele poderia fazer algo como:

public static final String login = usuario;

Agora, ele tem acesso livre a variável. Mas não recomendo esse tipo de abordagem.

static não significa que a variável ou método sera estática do ponto de vista que seu valor não pode mudar ( final é usado para estes casos ). static nos garante que somente haverá uma, e não mais que uma, referência para determinada variável ou método disponível em mémoria. Em outras palavras, declarando alguma coisa como static, todas as instâncias da classe irão compartilhar a mesma cópia da variável ou método
http://www.guj.com.br/articles/121

iniciante aki’ liganao…

[quote=charleston10]static não significa que a variável ou método sera estática do ponto de vista que seu valor não pode mudar ( final é usado para estes casos ). static nos garante que somente haverá uma, e não mais que uma, referência para determinada variável ou método disponível em mémoria. Em outras palavras, declarando alguma coisa como static, todas as instâncias da classe irão compartilhar a mesma cópia da variável ou método
http://www.guj.com.br/articles/121

iniciante aki’ liganao…

[/quote]

Sem problemas Charles. Eu só quis corrigir algumas lacunas que julguei importante.
É como eu disse, o static torna o membro da classe e não mais da instância.

Enfim, aguardemos como o Gbios vai solucionar o problema dele, dei a sugestão do uso do properties do sistema, mas veremos.

Oi nel!

Obrigado pela dica e também pelas explicações, tentei fazer pela dica que você deu leu perfeitamente na tela de login mas quando chamo ele na principal da null.

//Tela de Login System.setProperty("Login", usuario.getText()); System.out.println("usuario: "+ System.getProperty("Login")); Assim ele mostra perfeitamente.
Aqui chamo na principal para mostrar no jLabel:

//Tela Principal
mostrarUsuario.setText("Usuário Logado: "+ System.getProperty("Login"));

Ai aparece null. Desculpe sou iniciante, o que estou fazendo de errado? Ou como posso jogar para outra tela.

Vamos pessoal, o que estou fazendo de errado?
aguardo respostas.

Gbios,

Pelo que entendi, dá para usar ambas as soluções, sugeridas pelo nel e pelo charleston10.
Criei o código que acho que é mais ou menos o que você está usando. Para receber a senha, utilizei um componente do tipo JPasswordField, para não mostrar a senha digitada.

I - Uma primeira versão utilizando System.setProperty() e System.getProperty():

a) Classe que obtém o usuário e a senha:
Obs.: a classe Login não funciona de verdade, sempre retorna true no método autentica. Coloquei a classe Login junto da classe telaLogin, mas pode ficar também em outro arquivo.

[code]import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class telaLogin extends JFrame{
private JTextField txtUsuario;
private JPasswordField txtSenha;
public telaLogin(){
Container c = getContentPane();
c.setLayout(new FlowLayout());

txtUsuario = new JTextField(10);
c.add(new JLabel("Usuario:"));
c.add(txtUsuario);

txtSenha = new JPasswordField(6);
txtSenha.setEchoChar('*');
c.add(new JLabel("Senha:"));
c.add(txtSenha);

JButton btAcessar = new JButton("Acessar");
btAcessar.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
btAcessarActionPerformed(e);
  }
});

c.add(btAcessar);
	
setSize(200, 150);
setVisible(true);

}

private void btAcessarActionPerformed(java.awt.event.ActionEvent evt) {

Login autentica = new Login();     

String senha = new String(txtSenha.getPassword());
     
autentica.setUsuario(txtUsuario.getText());     
autentica.setSenha(senha);       
 
if(autentica.autentica() == false){     
  JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos !","ATENÇÃO",JOptionPane.WARNING_MESSAGE);     
}else{ 

  //AQUI UTILIZO O System.setProperty()
  System.setProperty("login",txtUsuario.getText());

  telaInicial principal = new telaInicial();
  this.dispose();            
  principal.setVisible(true);     
}             

}

public static void main(String args[]){
telaLogin app = new telaLogin();
}
}

class Login{
public void setUsuario(String usuario){}
public void setSenha(String senha){}
public boolean autentica(){
return true;
}
}[/code]

b) Classe com a tela principal:

[code]import javax.swing.;
import java.awt.
;

public class telaInicial extends JFrame{
public telaInicial(){
Container c = getContentPane();
c.setLayout(new FlowLayout());

//AQUI UTILIO O System.getProperty()
String usuario = System.getProperty("login","");

c.add(new JLabel(usuario));

setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}[/code]

II - Solução utilizando variáveis estáticas:

a) Classe que obtém o usuário e a senha:
Obs.: na classe Login os atributos e métodos são estáticos.

[code]import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class telaLogin extends JFrame{
private JTextField txtUsuario;
private JPasswordField txtSenha;
public telaLogin(){
Container c = getContentPane();
c.setLayout(new FlowLayout());

txtUsuario = new JTextField(10);
c.add(new JLabel("Usuario:"));
c.add(txtUsuario);

txtSenha = new JPasswordField(6);
txtSenha.setEchoChar('*');
c.add(new JLabel("Senha:"));
c.add(txtSenha);

JButton btAcessar = new JButton("Acessar");
btAcessar.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
btAcessarActionPerformed(e);
  }
});

c.add(btAcessar);
	
setSize(200, 150);
setVisible(true);

}

private void btAcessarActionPerformed(java.awt.event.ActionEvent evt) {

Login autentica = new Login();     

String senha = new String(txtSenha.getPassword());
     
autentica.setUsuario(txtUsuario.getText());     
autentica.setSenha(senha);       
 
if(autentica.autentica() == false){     
  JOptionPane.showMessageDialog(null,"Usuário ou Senha Inválidos !","ATENÇÃO",JOptionPane.WARNING_MESSAGE);     
}else{ 

  telaInicial principal = new telaInicial();
  this.dispose();            
  principal.setVisible(true);     
}             

}

public static void main(String args[]){
telaLogin app = new telaLogin();
}
}

class Login{
private static String usuario;
public static void setUsuario(String usuario){
Login.usuario = usuario;
}
public static String getUsuario(){
return usuario;
}
public static void setSenha(String senha){}
public static boolean autentica(){
return true;
}
}[/code]

b) Classe com a tela principal:

[code]import javax.swing.;
import java.awt.
;

public class telaInicial extends JFrame{
public telaInicial(){
Container c = getContentPane();
c.setLayout(new FlowLayout());

String usuario = Login.getUsuario();

c.add(new JLabel(usuario));

setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}[/code]

[quote=Gbios]Oi nel!

Obrigado pela dica e também pelas explicações, tentei fazer pela dica que você deu leu perfeitamente na tela de login mas quando chamo ele na principal da null.

//Tela de Login System.setProperty("Login", usuario.getText()); System.out.println("usuario: "+ System.getProperty("Login")); Assim ele mostra perfeitamente.
Aqui chamo na principal para mostrar no jLabel:

//Tela Principal
mostrarUsuario.setText("Usuário Logado: "+ System.getProperty("Login"));

Ai aparece null. Desculpe sou iniciante, o que estou fazendo de errado? Ou como posso jogar para outra tela.
[/quote]

Siga o exemplo do al.barbosa e veja se funciona, acredito que sim . Provavelmente o seu erro estava na ordem das chamadas entre as frames. Para setar a propriedade, deve ser exatamente na primeira tela do sistema, que é obviamente o Login. Somente após realizar o login é que o usuário poderá visualizar as frames do sistema. Portanto, veja senão está errada as chamadas por ai. Mas como eu disse, testa o que al.barbosa fez, deve funcionar.

Galera problema resolvido muito obrigado a todos. nel era a ordem da chamada mesmo. vlw pessoal vcs são demais.